home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / kaliosisquantrum / morb / gui.s < prev    next >
Text File  |  1998-01-12  |  127KB  |  7,308 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997-1998, CdBS Software (MORB)
  5. * Gui routines
  6. * $Id: Gui.s 0.67 1998/01/04 15:17:01 MORB Exp MORB $
  7. *
  8.  
  9. ;fs "_InitGui"
  10. _GuiBpMem:
  11.      ds.l      1
  12. _GuiSelMem:
  13.      ds.l      1
  14. _GuiBitmap:
  15.      ds.l      1
  16. _GuiSelBitmap:
  17.      ds.l      1
  18. _InitGui:
  19.      lea       _GuiBpPtrs,a0
  20.      move.l    _GuiBitmap(pc),d0
  21.      move.w    #bplpt,d1
  22.      moveq     #NbGuiPlanes-1,d2
  23. .Loop:
  24.      swap      d0
  25.      move.w    d1,(a0)+
  26.      move.w    d0,(a0)+
  27.      addq.w    #2,d1
  28.      move.w    d1,(a0)+
  29.      swap      d0
  30.      move.w    d0,(a0)+
  31.      addq.w    #2,d1
  32.      add.l     #GuiBufferWidth,d0
  33.      dbf       d2,.Loop
  34.  
  35.      lea       _GuiSelBpPtrs,a0
  36.      move.l    _GuiSelBitmap(pc),d0
  37.      move.l    d0,$8f00000
  38.      move.w    #bplpt,d1
  39.      moveq     #NbPlanes-1,d2
  40. .Loop2:
  41.      swap      d0
  42.      move.w    d1,(a0)+
  43.      move.w    d0,(a0)+
  44.      addq.w    #2,d1
  45.      move.w    d1,(a0)+
  46.      swap      d0
  47.      move.w    d0,(a0)+
  48.      addq.w    #2,d1
  49.      add.l     #GuiSelBufferWidth,d0
  50.      dbf       d2,.Loop2
  51.      rts
  52. ;fe
  53. ;fs "Gui copper table"
  54. CopLayer4:
  55.      dc.l      0,0
  56. GuiP:
  57.      dc.w      $29+240,CET_BREAK
  58.      dc.l      _GuiCList
  59.      dc.l      _GuiCopTable
  60.  
  61. _GuiCopTable:
  62.      dc.l      GuiNml
  63. _GuiL1Ptr:
  64.      dc.l      CopEnd,-1
  65.  
  66. GuiLayer1:
  67.      dc.l      0,0
  68. GuiSelP:
  69.      dc.w      $29+240,CET_BREAK
  70.      dc.l      _GuiSelCList
  71.      dc.l      _GuiSelCopTable
  72.  
  73. _GuiSelCopTable:
  74.      dc.l      GuiSelNml
  75.      dc.l      CopEnd,-1
  76.  
  77. CopEnd:
  78.      dc.l      0,0
  79.      dc.w      $29+256,CET_BREAK
  80.      dc.l      0,0
  81. ;fe
  82.  
  83. ;fs "_Request"
  84. _ReqHook:
  85.      ds.l      1
  86. _ReqLastGui:
  87.      ds.l      1
  88. ReqGuiObj:
  89.      ds.l      1
  90.  
  91. _Request:          ; a0=Title a1=body a2=buttons a3=Hook a4=datastream
  92.      movem.l   d2/a2-6,-(a7)
  93.      move.l    a3,_ReqHook
  94.  
  95.      move.l    a0,ReqTitle
  96.      move.l    a1,ReqBody
  97.      move.l    a4,ReqFDat
  98.      move.l    a2,a6
  99.  
  100.      lea       ReqGui(pc),a0
  101.      bsr       _CreateObjectTree
  102.  
  103.      move.l    d0,ReqGuiObj
  104.      move.l    _ObjectCollector,a0
  105.      move.l    d0,a2
  106.      DOMTDI    MTD_AddMember,a0
  107.  
  108.      lea       _GuiTemp,a3
  109.      lea       _ButtonClass(pc),a4
  110.      lea       _ReqButHook(pc),a5
  111.      moveq     #1,d2
  112.  
  113. .BLoop:
  114.      move.l    a4,a0
  115.      sub.l     a1,a1
  116.      bsr       _NewObject
  117.      tst.l     d0
  118.      beq.s     .BDone
  119.  
  120.      move.l    d0,a2
  121.      SDATALI   a3,BDTA_Label,a2
  122.      move.l    ReqButGrp,a0
  123.      DOMTDI    MTD_AddMember,a0
  124.  
  125. .CLoop:
  126.      move.b    (a6)+,d0
  127.      beq.s     .CDone
  128.      cmp.b     #"|",d0
  129.      beq.s     .CDone
  130.      move.b    d0,(a3)+
  131.      bra.s     .CLoop
  132.  
  133. .CDone:
  134.      clr.b     (a3)+
  135.      LBLOCKEAI GuiRootClass_ID,a2,a0
  136.      move.l    a5,guir_DTA_Hook(a0)
  137.  
  138.      tst.b     d0
  139.      beq.s     .BDone
  140.  
  141.      move.l    d2,guir_DTA_HookData(a0)
  142.      addq.l    #1,d2
  143.      bra.s     .BLoop
  144.  
  145. .BDone:
  146.      move.l    a3,_CtGuiTemp
  147.  
  148.      clr.l     guir_DTA_HookData(a0)
  149.  
  150.  
  151.      move.l    ReqGuiObj,a2
  152.      DOMTDI    GM_Open,a2
  153.      tst.l     d0
  154.      bne.s     .ReqFail
  155. .Fail:
  156.      movem.l   (a7)+,d2/a2-6
  157.      rts
  158.  
  159. .ReqFail:
  160.      move.l    d0,a4
  161.      DOMTDI    GM_Close,a2
  162.  
  163.      lea       RQTitle(pc),a0
  164.      lea       RQBody(pc),a1
  165.      lea       RQBut(pc),a2
  166.      sub.l     a3,a3
  167.      bsr.s     _Request
  168.  
  169.      moveq     #0,d0
  170.      bra.s     .Fail
  171.  
  172. RQTitle:
  173.      dc.b      "Request() failure",0
  174. RQBody:
  175.      dc.b      "%s error :",$a
  176.      dc.b      "%s",0
  177. RQBut:
  178.      dc.b      "OK",0
  179.      even
  180.  
  181. _ReqButHook:
  182.      movem.l   d2/a2,-(a7)
  183.  
  184.      move.l    d0,d2
  185.  
  186.      move.l    ReqGuiObj(pc),a2
  187.      DOMTDI    GM_Close,a2
  188.      move.l    a2,a0
  189.      bsr       _DisposeObject
  190.  
  191.      move.l    d2,d0
  192.      move.l    _ReqHook,d1
  193.      beq.s     .Done
  194.  
  195.      movem.l   (a7)+,d2/a2
  196.      move.l    d1,-(a7)
  197.      rts
  198.  
  199. .Done:
  200.      movem.l   (a7)+,d2/a2
  201.      rts
  202.  
  203. ReqButGrp:
  204.      ds.l      1
  205.  
  206. ReqGui:
  207.      GUI
  208.  
  209.      VGROUP
  210.  
  211.      HGROUP
  212.      SMALLBTN  "X",_ReqButHook,0
  213.      SMALLBTN  "I",_Iconify,0
  214.      dc.l      OBJ_Begin,_DragBarClass
  215.      dc.l      BDTA_Label
  216. ReqTitle:
  217.      dc.l      0
  218.      ENDOBJ
  219.      ENDOBJ
  220.  
  221.      dc.l      OBJ_Begin,_TextClass
  222.      dc.l      TDTA_Text
  223. ReqBody:
  224.      dc.l      0
  225.      dc.l      TDTA_FData
  226. ReqFDat:
  227.      dc.l      0
  228.      ENDOBJ
  229.  
  230.      dc.l      OBJ_Begin,_HGroupClass
  231.      STOOBJ    ReqButGrp
  232.  
  233.      ENDOBJ
  234.  
  235.      ENDOBJ
  236. ;fe
  237.  
  238. ;fs "_HandleMouse"
  239. _MouseHook:
  240.      dc.l      0
  241. _HandleMouse:
  242.      move.l    Low_Base,a6
  243.      moveq     #0,d0
  244.      CALL      ReadJoyPort
  245.  
  246.      move.l    _MouseX(pc),d6
  247.      move.l    _MouseY(pc),d7
  248.  
  249.      move.l    d0,d1
  250.      and.l     #JP_MHORZ_MASK,d1
  251.  
  252.      lea       LastHMCount(pc),a0
  253.      move.w    (a0),d2
  254.      move.w    d1,(a0)
  255.      sub.b     d2,d1
  256.  
  257.      extb.l    d1
  258.      add.l     d1,d6
  259.  
  260.      and.l     #JP_MVERT_MASK,d0
  261.      lsr.l     #8,d0
  262.  
  263.      lea       LastVMCount(pc),a0
  264.      move.w    (a0),d2
  265.      move.w    d0,(a0)
  266.      sub.b     d2,d0
  267.  
  268.      extb.l    d0
  269.      asr.l     #1,d0
  270.      add.l     d0,d7
  271.  
  272.      movem.l   _MinMouseX(pc),d0-3
  273.  
  274.      cmp.l     d0,d6
  275.      bge.s     .XPos
  276.      move.l    d0,d6
  277. .XPos:
  278.  
  279.      cmp.l     d2,d6
  280.      ble.s     .XOk
  281.      move.l    d2,d6
  282. .XOk:
  283.      move.l    d6,_MouseX
  284.  
  285.      cmp.l     d1,d7
  286.      bge.s     .YPos
  287.      move.l    d1,d7
  288. .YPos:
  289.  
  290.      cmp.l     d3,d7
  291.      ble.s     .YOk
  292.      move.l    d3,d7
  293. .YOk:
  294.      move.l    d7,_MouseY
  295.  
  296.      subq.w    #HotPointX,d6
  297.      add.w     d6,d6
  298.      subq.w    #HotPointY,d7
  299.  
  300.      lea       MouseGDwarf(pc),a0
  301.      movem.w   d6-7,gdw_X(a0)
  302.      bsr       _RefreshGardenDwarf
  303.  
  304.      move.l    _MouseHook(pc),d0
  305.      beq.s     .Done
  306.      move.l    d0,a0
  307.      jmp       (a0)
  308. .Done:
  309.  
  310.      rts
  311. _MinMouseX:
  312.      dc.l      0
  313. _MinMouseY:
  314.      dc.l      0
  315. _MaxMouseX:
  316.      dc.l      GuiScreenWidth
  317. _MaxMouseY:
  318.      dc.l      256
  319. _MouseX:
  320.      dc.l      GuiScreenWidth
  321. _MouseY:
  322.      dc.l      256
  323. LastHMCount:
  324.      ds.w      1
  325. LastVMCount:
  326.      ds.w      1
  327. MouseGDwarf:
  328.      dc.l      _MouseGardenDwarfDat,0
  329.      dc.w      0,0,14
  330. ;fe
  331. ;fs "_HandleGui"
  332. _CurrentGuiObject:
  333.      ds.l      1
  334.  
  335. _PlayfieldClickHandler:
  336.      ds.l      1
  337. _PreHandler:
  338.      ds.l      1
  339. _ActiveThingHandler:
  340.      ds.l      1
  341. _ActiveGuiEntry:
  342.      ds.l      1
  343. _OldMButtonState:
  344.      ds.b      1
  345.      even
  346.  
  347. _HandleGui:
  348.      move.l    _ActiveGuiObject(pc),d0
  349.      beq.s     .Hem
  350.      move.l    d0,a0
  351.      movem.l   _MouseX(pc),d0-1
  352.      sub.l     _GuiPos,d1
  353.      move.l    _ActiveGuiObjData(pc),d2
  354.      DOMTDJI   GCM_Handle,a0
  355.  
  356. .Hem:
  357.      tst.l     _CurrentGui(pc)
  358.      bne.s     .OldGuiHandler
  359.      move.l    _CurrentGuiObject(pc),d0
  360.      beq.s     .OldGuiHandler
  361.      move.l    d0,a0
  362.      movem.l   _MouseX(pc),d0-1
  363.      sub.l     _GuiPos,d1
  364.      DOMTDJI   GCM_Handle,a0
  365.  
  366. .OldGuiHandler:
  367.      move.l    _PreHandler(pc),d0
  368.      beq.s     .Kzlonka
  369.  
  370.      move.l    d0,a0
  371.      jsr       (a0)
  372.  
  373. .Kzlonka:
  374.      movem.l   _MouseX(pc),d0-1
  375.      sub.l     _GuiPos,d1
  376.  
  377.      move.l    _ActiveThingHandler(pc),d2
  378.      beq.s     .AhBon
  379.      move.l    d2,a1
  380.      move.l    _ActiveGuiEntry(pc),a0
  381.      lea       ge_Domain(a0),a2
  382.      move.l    a2,_CurrentDomain
  383.      jmp       (a1)
  384.  
  385. .AhBon:
  386.      move.b    _OldMButtonState(pc),d2
  387.      btst      #0,$dff016
  388.      seq       _OldMButtonState
  389.      bne.s     .PasClickuMilieu
  390.  
  391.      tst.b     d2
  392.      bne.s     .PasClickuMilieu
  393.  
  394.      cmp.l     #CopEnd,_GuiLayerPtr
  395.      beq       .ShowGui
  396.  
  397.      move.l    #CopEnd,_GuiLayerPtr
  398.      bra.s     .PasClickuMilieu
  399.  
  400. .ShowGui:
  401.      move.l    #CopLayer4,_GuiLayerPtr
  402.  
  403. .PasClickuMilieu:
  404.  
  405.      move.l    _PlayfieldClickHandler(pc),d2
  406.      beq.s     .Décidement
  407.  
  408.      cmp.l     #CopEnd,_GuiLayerPtr
  409.      beq       .GzlonK
  410.  
  411.      tst.l     d1
  412.      bpl.s     .Décidement
  413.  
  414. .GzlonK:
  415.  
  416.      movem.l   _MouseX(pc),d0-1
  417.      move.l    d2,a0
  418.      jmp       (a0)
  419.  
  420. .Décidement:
  421.      cmp.l     #CopEnd,_GuiLayerPtr
  422.      beq.s     .OhEtPuisMerdeTousVouf
  423.  
  424.      btst      #6,$bfe001
  425.      bne.s     .OhEtPuisMerdeTousVouf
  426.  
  427.      move.l    _CurrentGui(pc),d2
  428.      beq.s     .OhEtPuisMerdeTousVouf
  429.      move.l    d2,a0
  430.  
  431.      cmp2.l    ge_Domain+gd_Left(a0),d0
  432.      bcs.s     .OhEtPuisMerdeTousVouf
  433.  
  434.      cmp2.l    ge_Domain+gd_Top(a0),d1
  435.      bcs.s     .OhEtPuisMerdeTousVouf
  436.  
  437.      bsr.s     _DoClick
  438.  
  439. .OhEtPuisMerdeTousVouf:
  440.      rts
  441. ;fe
  442.  
  443. ;fs "_OpenGui"
  444. _OpenGui:          ; a0=Gui
  445.      move.l    a2,-(a7)
  446.  
  447.      move.l    a0,a2
  448.      move.l    (a2),d0
  449.      bne.s     .Ok
  450.  
  451.      lea       g_ObjectTree(a2),a0
  452.      bsr       _CreateObjectTree
  453.      tst.l     d0
  454.      beq.s     .Fail
  455.      move.l    d0,(a2)
  456.      move.l    d0,a2
  457.      move.l    _ObjectCollector,a0
  458.      DOMTDI    MTD_AddMember,a0
  459.      move.l    a2,d0
  460.  
  461. .Ok:
  462.      move.l    d0,a2
  463.      DOMTDI    GM_Open,a2
  464.      tst.l     d0
  465.      bne.s     .GuiFail
  466.  
  467.      moveq     #-1,d0
  468. .Fail:
  469.  
  470.      move.l    (a7)+,a2
  471.      rts
  472.  
  473. .GuiFail:
  474.      movem.l   a2-4,-(a7)
  475.      move.l    d0,a4
  476.      DOMTDI    GM_Close,a2
  477.  
  478.      lea       OGTitle(pc),a0
  479.      lea       OGBody(pc),a1
  480.      lea       OGBut(pc),a2
  481.      sub.l     a3,a3
  482.      bsr.s     _Request
  483.  
  484.      moveq     #0,d0
  485.      movem.l   (a7)+,a2-4
  486.      bra.s     .Fail
  487.  
  488. OGTitle:
  489.      dc.b      "OpenGui() failure",0
  490. OGBody:
  491.      dc.b      "%s error :",$a
  492.      dc.b      "%s",0
  493. OGBut:
  494.      dc.b      "OK",0
  495.      even
  496. ;fe
  497. ;fs "_CloseGui"
  498. _CloseGui:
  499.      move.l    _CurrentGuiObject(pc),a0
  500.      DOMTDJI   GM_Close,a0
  501. ;fe
  502.  
  503. ;fs "Classes"
  504. ;fs "GuiRootClass"
  505. _GuiRootClass:
  506.      dc.l      0
  507.      dc.l      _RootClass
  508.      dc.l      0,0,0,0,0
  509.      dc.l      guir_DataSize
  510.      dc.l      guir_Funcs
  511.      dc.l      guir_Data
  512.      dc.l      0
  513.  
  514. guir_Data:
  515.      ds.b      gd_Size
  516.      dc.l      20,20
  517.      dc.l      0,0
  518.      dc.l      1000
  519.      dc.l      0,0
  520.  
  521. guir_Funcs:
  522.      dc.l      GRCHandle
  523.      dc.l      GRCClick
  524.      dc.l      GRCClear
  525.      dc.l      GRCRender
  526.      dc.l      GRCLayout
  527.      dc.l      GRCGetMinMax
  528.      dc.l      0
  529.  
  530. GRCClear:
  531.      movem.l   d3-7/a5,-(a7)
  532.      move.l    _CurrentDomain,a5
  533.      LBLOCKEAI GuiRootClass_ID,a0,a1
  534.      move.l    a1,_CurrentDomain
  535.      moveq     #0,d3
  536.      moveq     #0,d4
  537.      moveq     #0,d5
  538.      move.l    gd_Width(a1),d6
  539.      move.l    gd_Height(a1),d7
  540.      bsr.s     _DrawRectangle
  541.      move.l    a5,_CurrentDomain
  542.      movem.l   (a7)+,d3-7/a5
  543.      rts
  544.  
  545. GRCGetMinMax:
  546. GRCLayout:
  547. GRCRender:
  548. GRCClick:
  549. GRCHandle:
  550.      moveq     #0,d0
  551.      rts
  552. ;fe
  553. ;fs "GuiClass"
  554. _GuiClass:
  555.      dc.l      0
  556.      dc.l      _GuiRootClass
  557.      dc.l      0,0,0,0,0
  558.      dc.l      gui_DataSize
  559.      dc.l      gui_Funcs
  560.      dc.l      gui_Data
  561.      dc.l      0
  562.      dc.l      gui_Init
  563.  
  564. gui_Data:
  565.      dc.l      -1,0,0
  566.  
  567. gui_Funcs:
  568.      dc.l      GUIToggle
  569.      dc.l      GUIHide
  570.      dc.l      GUIShow
  571.      dc.l      GUIMove
  572.      dc.l      GUIClose
  573.      dc.l      GUIOpen
  574.      dc.l      0
  575.  
  576. gui_Init:
  577.      move.l    #GCM_GetMinMax,d0
  578.      lea       GUIGetMinMax,a1
  579.      bsr       _SetMethod
  580.      move.l    #GCM_Layout,d0
  581.      lea       GUILayout,a1
  582.      bsr       _SetMethod
  583.      move.l    #GCM_Render,d0
  584.      lea       GUIRender,a1
  585.      bsr       _SetMethod
  586.      move.l    #GCM_Clear,d0
  587.      lea       GUIClear,a1
  588.      bsr       _SetMethod
  589.      move.l    #GCM_Handle,d0
  590.      lea       GUIHandle,a1
  591.      bsr       _SetMethod
  592.      rts
  593.  
  594. GUIOpen:
  595.      movem.l   d2/a2-3,-(a7)
  596.  
  597.      bsr.s     _ClearGui
  598.  
  599.      move.l    a0,a3
  600.      LBLOCKEAI GuiClass_ID,a3,a2
  601.  
  602.      move.l    _CurrentGuiObject(pc),d2
  603.      move.l    d2,gui_GDTA_OldGui(a2)
  604.      move.l    _CurrentGui(pc),gui_GDTA_OldStyleGui(a2)
  605.      bne.s     .Ok
  606.  
  607.      tst.l     d2
  608.      beq.s     .Ok
  609.      move.l    d2,a0
  610.      DOMTDI    GCM_Clear,a0
  611. .Ok:
  612.  
  613.      clr.l     _CurrentGui
  614.      move.l    a3,_CurrentGuiObject
  615.      DOMTDI    GCM_GetMinMax,a3
  616.      DOMTDI    GCM_Layout,a3
  617.      move.l    d0,gui_GDTA_Error(a2)
  618.      bne.s     .Fail
  619.  
  620.      DOMTDI    GCM_Render,a3
  621.  
  622.      tst.l     gui_GDTA_ShownFlag(a2)
  623.      bne.s     .Show
  624.      move.l    #CopEnd,_GuiLayerPtr
  625.      bra.s     .Done
  626.  
  627. .Show:
  628.      move.l    #CopLayer4,_GuiLayerPtr
  629.  
  630. .Done:
  631.      moveq     #0,d0
  632. .Fail:
  633.      movem.l   (a7)+,d2/a2-3
  634.      rts
  635.  
  636. GUIClose:
  637.      movem.l   d2-3/a2,-(a7)
  638.  
  639.      LBLOCKEAI GuiClass_ID,a0,a1
  640.      move.l    gui_GDTA_OldGui(a1),d2
  641.      move.l    d2,_CurrentGuiObject
  642.  
  643.      move.l    gui_GDTA_OldStyleGui(a1),d1
  644.      move.l    d1,_CurrentGui
  645.  
  646.      move.l    gui_GDTA_Error(a1),d3
  647.      bne.s     .DontClear
  648.  
  649.      DOMTDI    GCM_Clear,a0
  650.  
  651. .DontClear:
  652.      tst.l     d1
  653.      bne.s     .OldStyle
  654.  
  655.      tst.l     d2
  656.      beq.s     .Done
  657.      move.l    d2,_CurrentGuiObject
  658.      tst.l     d3
  659.      bne.s     .Done
  660.      move.l    d2,a2
  661.      DOMTDI    GCM_GetMinMax,a2
  662.      DOMTDI    GCM_Layout,a2
  663.      DOMTDI    GCM_Render,a2
  664.      bra.s     .Done
  665.  
  666. .OldStyle:
  667.      tst.l     d3
  668.      bne.s     .Done
  669.      move.l    d1,a0
  670.      bsr.s     _ChangeGui
  671.  
  672. .Done:
  673.      movem.l   (a7)+,d2-3/a2
  674.      rts
  675.  
  676. GUIGetMinMax:
  677.      movem.l   d2/a2,-(a7)
  678.  
  679.      LBLOCKEAI RootClass_ID,a0,a0
  680.      move.l    (a0),a2
  681.      DOMTDI    GCM_GetMinMax,a2
  682.  
  683.      LBLOCKEAI GuiRootClass_ID,a2,a0
  684.      moveq     #0,d0
  685.      move.l    #255,d1
  686.  
  687.      move.l    guir_DTA_MaxHeight(a0),d2
  688.      beq.s     .NoMax
  689.      move.l    d1,d0
  690.      sub.l     guir_DTA_MaxHeight(a0),d0
  691. .NoMax:
  692.      move.l    d0,_MinGuiPos
  693.  
  694.      sub.l     guir_DTA_MinHeight(a0),d1
  695.      move.l    d1,_MaxGuiPos
  696.  
  697.      move.l    _GuiPos(pc),d2
  698.  
  699.      cmp.l     d0,d2
  700.      bcc.s     .MinOk
  701.      move.l    d0,d2
  702. .MinOk:
  703.  
  704.      cmp.l     d2,d1
  705.      bcc.s     .MaxOk
  706.      move.l    d1,d2
  707. .MaxOk:
  708.      move.l    d2,_GuiPos
  709.  
  710.      movem.l   (a7)+,d2/a2
  711.      rts
  712.  
  713. GUILayout:
  714.      movem.l   a2-3,-(a7)
  715.      move.l    #CopEnd,_GuiL1Ptr
  716.  
  717.      LBLOCKEAI GuiRootClass_ID,a0,a1
  718.  
  719.      LBLOCKEAI RootClass_ID,a0,a0
  720.      move.l    (a0),a0
  721.      LBLOCKEAI GuiRootClass_ID,a0,a2
  722.  
  723.      cmp.l     #256,guir_DTA_MinHeight(a2)
  724.      bcc.s     .TooTall
  725.      cmp.l     #GuiScreenWidth-4+1,guir_DTA_MinWidth(a2)
  726.      bcc.s     .TooWide
  727.  
  728.      move.l    _GuiPos(pc),d0
  729.      move.l    d0,d1
  730.  
  731.      add.l     #$28,d0
  732.      move.w    d0,GuiP
  733.  
  734.      move.l    #2,gd_Left(a2)
  735.      move.l    #0,gd_Top(a2)
  736.  
  737.      move.l    #GuiScreenWidth-2,gd_Right(a2)
  738.      move.l    #GuiScreenWidth-4,gd_Width(a2)
  739.  
  740.      move.l    #255,d0
  741.      sub.l     d1,d0
  742.      move.l    d0,gd_Height(a2)
  743.      move.l    d0,gd_Bottom(a2)
  744.  
  745.      DOMTDI    GCM_Layout,a0
  746. .Fail:
  747.      movem.l   (a7)+,a2-3
  748.      rts
  749.  
  750. .TooTall:
  751.      lea       GUITooTall,a0
  752.      move.l    a0,d0
  753.      bra.s     .Fail
  754.  
  755. .TooWide:
  756.      lea       GUITooWide,a0
  757.      move.l    a0,d0
  758.      bra.s     .Fail
  759.  
  760. GUITooTall:
  761.      dc.l      GUIName
  762.      dc.l      GUITT
  763.  
  764. GUITooWide:
  765.      dc.l      GUIName
  766.      dc.l      GUITW
  767.  
  768.  
  769. GUIRender:
  770.      LBLOCKEAI RootClass_ID,a0,a0
  771.      move.l    (a0),a0
  772.      DOMTDJI   GCM_Render,a0
  773.  
  774. GUIClear:
  775.      LBLOCKEAI RootClass_ID,a0,a0
  776.      move.l    (a0),a0
  777.      DOMTDJI   GCM_Clear,a0
  778.  
  779. GUIHandle:
  780.      LBLOCKEAI GuiClass_ID,a0,a1
  781.      tst.l     gui_GDTA_ShownFlag(a1)
  782.      beq.s     .Grunt
  783.  
  784.      btst      #6,$bfe001
  785.      bne.s     .Grunt
  786.  
  787.      LBLOCKEAI RootClass_ID,a0,a0
  788.      move.l    (a0),a0
  789.      LBLOCKEAI GuiRootClass_ID,a0,a1
  790.  
  791.      cmp2.l    gd_Left(a1),d0
  792.      bcs.s     .Grunt
  793.  
  794.      cmp2.l    gd_Top(a1),d1
  795.      bcs.s     .Grunt
  796.  
  797.      DOMTDJI   GCM_Click,a0
  798.  
  799. .Grunt:
  800.      move.b    _OldMButtonState(pc),d1
  801.      btst      #0,$dff016
  802.      seq       _OldMButtonState
  803.      bne.s     .Done
  804.  
  805.      tst.b     d1
  806.      beq.s     GUIToggle
  807. .Done:
  808.      rts
  809.  
  810. GUIMove:
  811.      move.l    a2,-(a7)
  812.      move.l    a0,a2
  813.      DOMTDI    GCM_Clear,a0
  814.      DOMTDI    GCM_Layout,a2
  815.      DOMTDI    GCM_Render,a2
  816.      move.l    (a7)+,a2
  817.      rts
  818.  
  819. GUIShow:
  820.      SDATALI   #-1,GDTA_ShownFlag,a0
  821.      move.l    #CopLayer4,_GuiLayerPtr
  822.      rts
  823.  
  824. GUIHide:
  825.      SDATALI   #0,GDTA_ShownFlag,a0
  826.      move.l    #CopEnd,_GuiLayerPtr
  827.      rts
  828.  
  829. GUIToggle:
  830.      LBLOCKEAI GuiClass_ID,a0,a0
  831.      not.l     gui_GDTA_ShownFlag(a0)
  832.      bne.s     .Show
  833.      move.l    #CopEnd,_GuiLayerPtr
  834.      rts
  835.  
  836. .Show:
  837.      move.l    #CopLayer4,_GuiLayerPtr
  838.      rts
  839.  
  840. GUIName:
  841.      dc.b      "GuiClass",0
  842. GUITT:
  843.      dc.b      "GUI is too tall",0
  844. GUITW:
  845.      dc.b      "GUI is too wide",0
  846.      even
  847. ;fe
  848. ;fs "HGroupClass"
  849. _HGroupClass:
  850.      dc.l      0
  851.      dc.l      _GuiRootClass
  852.      dc.l      0,0,0,0,0
  853.      dc.l      hgr_DataSize
  854.      dc.l      empty_Funcs
  855.      dc.l      hgroup_Data
  856.      dc.l      0
  857.      dc.l      hgroup_Init
  858.  
  859. hgroup_Data:
  860.      dc.l      GuiHorSpacing
  861.  
  862. hgroup_Init:
  863.      move.l    #GCM_GetMinMax,d0
  864.      lea       HGRGetMinMax,a1
  865.      bsr       _SetMethod
  866.      move.l    #GCM_Layout,d0
  867.      lea       HGRLayout,a1
  868.      bsr       _SetMethod
  869.      move.l    #GCM_Render,d0
  870.      lea       _GRPRender,a1
  871.      bsr       _SetMethod
  872.      move.l    #GCM_Click,d0
  873.      lea       _GRPClick,a1
  874.      bsr       _SetMethod
  875.      rts
  876.  
  877. HGRGetMinMax:
  878.      movem.l   d2-7/a2-5,-(a7)
  879.      move.l    a0,a5
  880.  
  881.      LBLOCKEAI RootClass_ID,a5,a2
  882.      move.l    (a2),a2
  883.  
  884.      LDATALI   HGDT_Spacing,a5,a4
  885.  
  886.      move.l    a0,a1
  887.      lea       ge_Size(a0),a0
  888.      move.l    a4,d2
  889.      neg.l     d2
  890.      move.l    d2,d4
  891.      moveq     #0,d3
  892.      moveq     #0,d5
  893.      not.l     d5
  894.      sf        d6
  895.  
  896. .Loop:
  897.      move.l    (a2),d0
  898.      beq.s     .Done
  899.      move.l    d0,a3
  900.  
  901.      DOMTDI    GCM_GetMinMax,a2
  902.  
  903.      LBLOCKEAI GuiRootClass_ID,a2,a0
  904.      add.l     guir_DTA_MinWidth(a0),d2
  905.      move.l    guir_DTA_MaxWidth(a0),d0
  906.      seq       d7
  907.      or.b      d7,d6
  908.      add.l     d0,d4
  909.  
  910.      move.l    guir_DTA_MinHeight(a0),d0
  911.      cmp.l     d0,d3
  912.      bcc.s     .MiHOk
  913.      move.l    d0,d3
  914. .MiHOk:
  915.  
  916.      move.l    guir_DTA_MaxHeight(a0),d0
  917.      beq.s     .MaHOk
  918.      cmp.l     d5,d0
  919.      bcc.s     .MaHOk
  920.      move.l    d0,d5
  921. .MaHOk:
  922.  
  923.      add.l     a4,d2
  924.      add.l     a4,d4
  925.  
  926.      move.l    a3,a2
  927.      bra.s     .Loop
  928.  
  929. .Done:
  930.      tst.b     d6
  931.      beq.s     .WMaxOk
  932.      moveq     #0,d4
  933. .WMaxOk:
  934.  
  935.      tst.l     d5
  936.      bpl.s     .HMaxOk
  937.      moveq     #0,d5
  938. .HMaxOk:
  939.  
  940.      LBLOCKEAI GuiRootClass_ID,a5,a0
  941.      movem.l   d2-5,guir_DTA_MinWidth(a0)
  942.  
  943.      movem.l   (a7)+,d2-7/a2-5
  944.      rts
  945.  
  946. HGRLayout:
  947.      movem.l   d2-7/a2-3/a5-6,-(a7)
  948.  
  949.      move.l    a0,a6
  950.      LBLOCKEAI RootClass_ID,a6,a5
  951.      move.l    (a5),a5
  952.      moveq     #0,d7
  953.  
  954.      LDATALI   HGDT_Spacing,a6,a3
  955.  
  956.      LBLOCKEAI GuiRootClass_ID,a6,a1
  957.      move.l    gd_Height(a1),d0
  958.      move.l    gd_Top(a1),d1
  959.      move.l    gd_Bottom(a1),d2
  960.      moveq     #0,d4
  961.      move.l    a5,a0
  962.  
  963. .InitLoop:
  964.      move.l    (a0),d3
  965.      beq.s     .ILOk
  966.  
  967.      LBLOCKEAI GuiRootClass_ID,a0,a2
  968.      move.l    d1,gd_Top(a2)
  969.      move.l    d2,gd_Bottom(a2)
  970.      clr.l     gd_Width(a2)
  971.      move.l    d0,gd_Height(a2)
  972.  
  973.      add.l     guir_DTA_Weight(a2),d7
  974.      add.l     a3,d4
  975.  
  976.      move.l    d3,a0
  977.      bra.s     .InitLoop
  978.  
  979. .ILOk:
  980.      tst.l     d7
  981.      bne.s     .WeightOk
  982.      lea       HGRAWN(pc),a0
  983.      move.l    a0,d0
  984.      bra.s     .Fail
  985. .WeightOk:
  986.  
  987.      move.l    gd_Width(a1),d5
  988.  
  989.      sub.l     a3,d4
  990.      sub.l     d4,d5
  991.  
  992. .BigLoop:
  993.      move.l    a5,a0
  994.  
  995. .Loop:
  996.      move.l    (a0),d6
  997.      beq.s     .Ok
  998.  
  999.      LBLOCKEAI GuiRootClass_ID,a0,a0
  1000.      tst.l     gd_Width(a0)
  1001.      bne.s     .Fixed
  1002.  
  1003.      move.l    guir_DTA_MinWidth(a0),d0
  1004.      move.l    guir_DTA_Weight(a0),d3
  1005.      beq.s     .FixMin
  1006.  
  1007.      move.l    d3,d4
  1008.      mulu      d5,d4
  1009.      divu      d7,d4
  1010.  
  1011.      moveq     #0,d2
  1012.      swap      d4
  1013.      lsl.w     #1,d4
  1014.      swap      d4
  1015.      addx.l    d2,d4
  1016.      ext.l     d4
  1017.  
  1018.      cmp.l     d0,d4
  1019.      bcc.s     .MinOk
  1020. .FixMin:
  1021.      move.l    d0,gd_Width(a0)
  1022.      sub.l     d0,d5
  1023.      sub.l     d3,d7
  1024.      moveq     #0,d1
  1025.      move.l    d1,gd_Left(a0)
  1026.      bra.s     .BigLoop
  1027. .MinOk:
  1028.  
  1029.      move.l    guir_DTA_MaxWidth(a0),d0
  1030.      beq.s     .Next
  1031.  
  1032.      cmp.l     d4,d0
  1033.      bcc.s     .Next
  1034.      move.l    d0,gd_Width(a0)
  1035.      sub.l     d0,d5
  1036.      sub.l     d3,d7
  1037.      moveq     #1,d1
  1038.      move.l    d1,gd_Left(a0)
  1039.      bra.s     .BigLoop
  1040.  
  1041. .Fixed:
  1042.      move.l    gd_Left(a0),d0
  1043.      eor.l     d1,d0
  1044.      beq.s     .Next
  1045.  
  1046.      move.l    gd_Width(a0),d0
  1047.      add.l     d5,d0
  1048.      move.l    guir_DTA_Weight(a0),d2
  1049.      mulu      d2,d0
  1050.      add.l     d7,d2
  1051.      divu      d2,d0
  1052.  
  1053.      moveq     #0,d3
  1054.      swap      d0
  1055.      lsl.w     #1,d0
  1056.      swap      d0
  1057.      addx.l    d3,d0
  1058.      ext.l     d0
  1059.  
  1060.      move.l    guir_DTA_MinWidth(a0),d3
  1061.      cmp.l     d3,d0
  1062.      bcs.s     .Next
  1063.  
  1064.      move.l    guir_DTA_MaxWidth(a0),d3
  1065.      beq.s     .AhhRâaah
  1066.      cmp.l     d0,d3
  1067.      bcs.s     .Next
  1068.  
  1069. .AhhRâaah:
  1070.      add.l     gd_Width(a0),d5
  1071.      clr.l     gd_Width(a0)
  1072.      move.l    d2,d7
  1073.      bra.s     .BigLoop
  1074.  
  1075. .Next:
  1076.      move.l    d6,a0
  1077.      bra       .Loop
  1078.  
  1079. .Ok:
  1080.      move.l    gd_Left(a1),d2
  1081.  
  1082. .PosLoop:
  1083.      move.l    (a5),d6
  1084.      beq.s     .AllDone
  1085.  
  1086.      LBLOCKEAI GuiRootClass_ID,a5,a0
  1087.  
  1088.      move.l    d2,gd_Left(a0)
  1089.  
  1090.      move.l    gd_Width(a0),d3
  1091.      bne.s     .PLWOk
  1092.  
  1093.      move.l    guir_DTA_Weight(a0),d3
  1094.      mulu      d5,d3
  1095.      divu      d7,d3
  1096.  
  1097.      moveq     #0,d0
  1098.      swap      d3
  1099.      lsl.w     #1,d3
  1100.      swap      d3
  1101.      addx.l    d0,d3
  1102.      ext.l     d3
  1103.  
  1104.      move.l    d3,gd_Width(a0)
  1105. .PLWOk:
  1106.  
  1107.      add.l     d3,d2
  1108.      move.l    d2,gd_Right(a0)
  1109.      add.l     a3,d2
  1110.  
  1111.      DOMTDI    GCM_Layout,a5
  1112.      tst.l     d0
  1113.      bne.s     .Fail
  1114.  
  1115.      move.l    d6,a5
  1116.      bra.s     .PosLoop
  1117.  
  1118. .AllDone:
  1119.      moveq     #0,d0
  1120. .Fail:
  1121.      movem.l   (a7)+,d2-7/a2-3/a5-6
  1122.      rts
  1123.  
  1124. HGRAWN:
  1125.      dc.l      HGRName
  1126.      dc.l      GRPAllWNull
  1127. HGRName:
  1128.      dc.b      "HGroupClass",0
  1129.      even
  1130. ;fe
  1131. ;fs "VKnobClass"
  1132. _VKnobClass:
  1133.      dc.l      0
  1134.      dc.l      _GuiRootClass
  1135.      dc.l      0,0,0,0,0
  1136.      dc.l      vkb_DataSize
  1137.      dc.l      empty_Funcs
  1138.      dc.l      vhandle_data
  1139.      dc.l      0
  1140.      dc.l      vhandle_Init
  1141.  
  1142. vhandle_data:
  1143.      dc.l      0,0,0,0
  1144.  
  1145. vhandle_Init:
  1146.      LBLOCKEAI GuiRootClass_ID,a2,a3
  1147.      add.l     a1,a3
  1148.  
  1149.      moveq     #0,d0
  1150.      move.l    d0,guir_DTA_MinHeight(a3)
  1151.      moveq     #4,d0
  1152.      move.l    d0,guir_DTA_MinWidth(a3)
  1153.      move.l    d0,guir_DTA_MaxWidth(a3)
  1154.  
  1155.      move.l    #GCM_Layout,d0
  1156.      lea       VKBLayout,a1
  1157.      bsr       _SetMethod
  1158.      move.l    #GCM_Render,d0
  1159.      lea       VKBRender,a1
  1160.      bsr       _SetMethod
  1161.      move.l    #GCM_Click,d0
  1162.      lea       VKBClick,a1
  1163.      bsr       _SetMethod
  1164.      move.l    #GCM_Handle,d0
  1165.      lea       VKBHandler,a1
  1166.      bsr       _SetMethod
  1167.      rts
  1168.  
  1169. VKBLayout:
  1170.      move.l    d2,-(a7)
  1171.  
  1172.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1173.      move.l    gd_Left(a1),d2
  1174.  
  1175.      move.l    4(a0),a1
  1176.      tst.l     4(a1)
  1177.      beq.s     .ErrAtBegin
  1178.  
  1179.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1180.      move.l    guir_DTA_Weight(a1),d1
  1181.  
  1182.      move.l    gd_Width(a1),d0
  1183.      sub.l     d0,d2
  1184.  
  1185.      add.l     guir_DTA_MinWidth(a1),d2
  1186.  
  1187.      move.l    (a0),a1
  1188.      tst.l     (a1)
  1189.      beq.s     .ErrAtEnd
  1190.  
  1191.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1192.      add.l     guir_DTA_Weight(a1),d1
  1193.      beq.s     .Err2NullWeights
  1194.  
  1195.      LBLOCKEAI VKnobClass_ID,a0,a1
  1196.      movem.l   d0-2,vkb_VKDT_TotSize(a1)
  1197.  
  1198.      moveq     #0,d0
  1199. .Fail:
  1200.      move.l    (a7)+,d2
  1201.      rts
  1202.  
  1203. .ErrAtBegin:
  1204.      lea       VKBAB(pc),a0
  1205.      move.l    a0,d0
  1206.      bra.s     .Fail
  1207.  
  1208. .ErrAtEnd:
  1209.      lea       VKBAE(pc),a0
  1210.      move.l    a0,d0
  1211.      bra.s     .Fail
  1212.  
  1213. .Err2NullWeights:
  1214.      lea       VKB2NW(pc),a0
  1215.      move.l    a0,d0
  1216.      bra.s     .Fail
  1217.  
  1218. VKBRender:
  1219.      movem.l   d2-4,-(a7)
  1220.      move.l    _CurrentDomain(pc),-(a7)
  1221.  
  1222.      move.l    (a0),a1
  1223.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1224.      move.l    gd_Width(a1),d1
  1225.      move.l    d1,d2
  1226.      sub.l     guir_DTA_MinWidth(a1),d1
  1227.  
  1228.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1229.  
  1230.      add.l     gd_Left(a1),d1
  1231.      LBLOCKEAI VKnobClass_ID,a0,a0
  1232.      move.l    d1,vkb_VKDT_MaxPos(a0)
  1233.      add.l     d2,vkb_VKDT_TotSize(a0)
  1234.  
  1235.      moveq     #0,d0
  1236.      move.l    a1,_CurrentDomain
  1237.      moveq     #0,d1
  1238.      move.l    gd_Height(a1),d3
  1239.      moveq     #4,d2
  1240.      sf        d4
  1241.      bsr       _DrawBevelBox
  1242.  
  1243.      move.l    (a7)+,_CurrentDomain
  1244.      movem.l   (a7)+,d2-4
  1245.      rts
  1246.  
  1247. VKBClick:
  1248.      move.l    d2,-(a7)
  1249.  
  1250.      add.l     _GuiPos(pc),d1
  1251.      move.l    d1,_MinMouseY
  1252.      move.l    d1,_MaxMouseY
  1253.  
  1254.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1255.      move.l    gd_Left(a1),d2
  1256.      sub.l     d0,d2
  1257.      move.l    d0,VKBOffset
  1258.  
  1259.      LBLOCKEAI VKnobClass_ID,a0,a1
  1260.  
  1261.      movem.l   vkb_VKDT_MinPos(a1),d0-1
  1262.      sub.l     d2,d0
  1263.      move.l    d0,_MinMouseX
  1264.      sub.l     d2,d1
  1265.      move.l    d1,_MaxMouseX
  1266.  
  1267.      sf        VKBFlag
  1268.  
  1269.      move.l    a0,_ActiveGuiObject
  1270.      move.l    (a7)+,d2
  1271.      rts
  1272.  
  1273. VKBHandler:
  1274.      movem.l   d3-7/a2,-(a7)
  1275.      move.l    _CurrentDomain(pc),-(a7)
  1276.  
  1277.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1278.      move.l    a1,_CurrentDomain
  1279.  
  1280.      moveq     #-1,d3
  1281.      moveq     #0,d5
  1282.      moveq     #4,d6
  1283.      move.l    gd_Height(a1),d7
  1284.      move.l    VKBPos(pc),d4
  1285.  
  1286.      btst      #6,$bfe001
  1287.      bne.s     .Release
  1288.  
  1289.      sub.l     VKBOffset(pc),d0
  1290.      move.l    d0,VKBPos
  1291.      tst.b     VKBFlag
  1292.      beq.s     .DontErase
  1293.  
  1294.      cmp.l     d0,d4
  1295.      beq.s     .Done
  1296.  
  1297.      tst.b     VKBFlag
  1298.      beq.s     .DontErase
  1299.      bsr       _DrawRectangle
  1300. .DontErase:
  1301.      move.l    d0,d4
  1302.      bsr       _DrawRectangle
  1303.      st        VKBFlag
  1304.  
  1305. .Done:
  1306.      move.l    (a7)+,_CurrentDomain
  1307.      movem.l   (a7)+,d3-7/a2
  1308.      rts
  1309.  
  1310. .Release:
  1311.      tst.b     VKBFlag
  1312.      beq.s     .DontErase2
  1313.      bsr       _DrawRectangle
  1314. .DontErase2:
  1315.  
  1316.      clr.l     _ActiveGuiObject
  1317.  
  1318.      clr.l     _MinMouseX
  1319.      clr.l     _MinMouseY
  1320.  
  1321.      move.l    #GuiScreenWidth,_MaxMouseX
  1322.      move.l    #256,_MaxMouseY
  1323.  
  1324.      tst.l     d4
  1325.      beq.s     .Done
  1326.  
  1327.      LBLOCKEAI VKnobClass_ID,a0,a1
  1328.      movem.l   vkb_VKDT_TotSize(a1),d0-1
  1329.  
  1330.      move.l    4(a0),a1
  1331.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1332.  
  1333.      move.l    gd_Width(a1),d3
  1334.      add.l     d4,d3
  1335.      mulu      d1,d3
  1336.      divu      d0,d3
  1337.  
  1338.      moveq     #0,d4
  1339.      swap      d3
  1340.      lsl.w     #1,d3
  1341.      swap      d3
  1342.      addx.l    d4,d3
  1343.      ext.l     d3
  1344.  
  1345.      move.l    d3,guir_DTA_Weight(a1)
  1346.  
  1347.      move.l    (a0),a1
  1348.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1349.      sub.l     d3,d1
  1350.      move.l    d1,guir_DTA_Weight(a1)
  1351.  
  1352.      LDATALI   DTA_Parent,a0,a2
  1353.      DOMTDI    GCM_Layout,a2
  1354.      DOMTDI    GCM_Clear,a2
  1355.      DOMTDI    GCM_Render,a2
  1356.  
  1357.      move.l    (a7)+,_CurrentDomain
  1358.      movem.l   (a7)+,d3-7/a2
  1359.      rts
  1360.  
  1361. VKBOffset:
  1362.      ds.l      1
  1363. VKBPos:
  1364.      ds.l      1
  1365. VKBFlag:
  1366.      dc.l      0
  1367.  
  1368. VKBAB:
  1369.      dc.l      VKBName
  1370.      dc.l      KNBAtBeg
  1371. VKBAE:
  1372.      dc.l      VKBName
  1373.      dc.l      KNBAtEnd
  1374. VKB2NW:
  1375.      dc.l      VKBName
  1376.      dc.l      KNB2Null
  1377.  
  1378. VKBName:
  1379.      dc.b      "VKnobClass",0
  1380.      even
  1381. ;fe
  1382. ;fs "VGroupClass"
  1383. _VGroupClass:
  1384.      dc.l      0
  1385.      dc.l      _GuiRootClass
  1386.      dc.l      0,0,0,0,0
  1387.      dc.l      vgr_DataSize
  1388.      dc.l      empty_Funcs
  1389.      dc.l      vgroup_Data
  1390.      dc.l      0
  1391.      dc.l      vgroup_Init
  1392.  
  1393. vgroup_Data:
  1394.      dc.l      GuiVerSpacing
  1395.  
  1396. vgroup_Init:
  1397.      move.l    #GCM_GetMinMax,d0
  1398.      lea       VGRGetMinMax,a1
  1399.      bsr       _SetMethod
  1400.      move.l    #GCM_Layout,d0
  1401.      lea       VGRLayout,a1
  1402.      bsr       _SetMethod
  1403.      move.l    #GCM_Render,d0
  1404.      lea       _GRPRender,a1
  1405.      bsr       _SetMethod
  1406.      move.l    #GCM_Click,d0
  1407.      lea       _GRPClick,a1
  1408.      bsr       _SetMethod
  1409.      rts
  1410.  
  1411. VGRGetMinMax:
  1412.      movem.l   d2-7/a2-5,-(a7)
  1413.      move.l    a0,a5
  1414.  
  1415.      LBLOCKEAI RootClass_ID,a5,a2
  1416.      move.l    (a2),a2
  1417.  
  1418.      LDATALI   VGDT_Spacing,a5,a4
  1419.  
  1420.      move.l    a0,a1
  1421.      lea       ge_Size(a0),a0
  1422.      move.l    a4,d3
  1423.      neg.l     d3
  1424.      move.l    d3,d5
  1425.      moveq     #0,d2
  1426.      moveq     #0,d4
  1427.      not.l     d4
  1428.      sf        d6
  1429.  
  1430. .Loop:
  1431.      move.l    (a2),d0
  1432.      beq.s     .Done
  1433.      move.l    d0,a3
  1434.  
  1435.      DOMTDI    GCM_GetMinMax,a2
  1436.  
  1437.      LBLOCKEAI GuiRootClass_ID,a2,a0
  1438.      add.l     guir_DTA_MinHeight(a0),d3
  1439.      move.l    guir_DTA_MaxHeight(a0),d0
  1440.      seq       d7
  1441.      or.b      d7,d6
  1442.      add.l     d0,d5
  1443.  
  1444.      move.l    guir_DTA_MinWidth(a0),d0
  1445.      cmp.l     d0,d2
  1446.      bcc.s     .MiWOk
  1447.      move.l    d0,d2
  1448. .MiWOk:
  1449.  
  1450.      move.l    guir_DTA_MaxWidth(a0),d0
  1451.      beq.s     .MaWOk
  1452.      cmp.l     d4,d0
  1453.      bcc.s     .MaWOk
  1454.      move.l    d0,d4
  1455. .MaWOk:
  1456.  
  1457.      add.l     a4,d3
  1458.      add.l     a4,d5
  1459.  
  1460.      move.l    a3,a2
  1461.      bra.s     .Loop
  1462.  
  1463. .Done:
  1464.      tst.b     d6
  1465.      beq.s     .HMaxOk
  1466.      moveq     #0,d5
  1467. .HMaxOk:
  1468.  
  1469.      tst.l     d4
  1470.      bpl.s     .WMaxOk
  1471.      moveq     #0,d4
  1472. .WMaxOk:
  1473.  
  1474.      LBLOCKEAI GuiRootClass_ID,a5,a0
  1475.      movem.l   d2-5,guir_DTA_MinWidth(a0)
  1476.  
  1477.      movem.l   (a7)+,d2-7/a2-5
  1478.      rts
  1479.  
  1480. VGRLayout:
  1481.      movem.l   d2-7/a2-3/a5-6,-(a7)
  1482.  
  1483.      move.l    a0,a6
  1484.      LBLOCKEAI RootClass_ID,a6,a5
  1485.      move.l    (a5),a5
  1486.      moveq     #0,d7
  1487.  
  1488.      LDATALI   VGDT_Spacing,a6,a3
  1489.  
  1490.      LBLOCKEAI GuiRootClass_ID,a6,a1
  1491.      move.l    gd_Width(a1),d0
  1492.      move.l    gd_Left(a1),d1
  1493.      move.l    gd_Right(a1),d2
  1494.      moveq     #0,d4
  1495.      move.l    a5,a0
  1496.  
  1497. .InitLoop:
  1498.      move.l    (a0),d3
  1499.      beq.s     .ILOk
  1500.  
  1501.      LBLOCKEAI GuiRootClass_ID,a0,a2
  1502.      move.l    d1,gd_Left(a2)
  1503.      move.l    d2,gd_Right(a2)
  1504.      clr.l     gd_Height(a2)
  1505.      move.l    d0,gd_Width(a2)
  1506.  
  1507.      add.l     guir_DTA_Weight(a2),d7
  1508.      add.l     a3,d4
  1509.  
  1510.      move.l    d3,a0
  1511.      bra.s     .InitLoop
  1512.  
  1513. .ILOk:
  1514.      tst.l     d7
  1515.      bne.s     .WeightOk
  1516.      lea       VGRAWN(pc),a0
  1517.      move.l    a0,d0
  1518.      bra.s     .Fail
  1519. .WeightOk:
  1520.  
  1521.      move.l    gd_Height(a1),d5
  1522.  
  1523.      sub.l     a3,d4
  1524.      sub.l     d4,d5
  1525.  
  1526. .BigLoop:
  1527.      move.l    a5,a0
  1528.  
  1529. .Loop:
  1530.      move.l    (a0),d6
  1531.      beq.s     .Ok
  1532.  
  1533.      LBLOCKEAI GuiRootClass_ID,a0,a0
  1534.      tst.l     gd_Height(a0)
  1535.      bne.s     .Fixed
  1536.  
  1537.      move.l    guir_DTA_MinHeight(a0),d0
  1538.      move.l    guir_DTA_Weight(a0),d3
  1539.      beq.s     .FixMin
  1540.  
  1541.      move.l    d3,d4
  1542.      mulu      d5,d4
  1543.      divu      d7,d4
  1544.  
  1545.      moveq     #0,d2
  1546.      swap      d4
  1547.      lsl.w     #1,d4
  1548.      swap      d4
  1549.      addx.l    d2,d4
  1550.      ext.l     d4
  1551.  
  1552.      cmp.l     d0,d4
  1553.      bcc.s     .MinOk
  1554. .FixMin:
  1555.      move.l    d0,gd_Height(a0)
  1556.      sub.l     d0,d5
  1557.      sub.l     d3,d7
  1558.      moveq     #0,d1
  1559.      move.l    d1,gd_Top(a0)
  1560.      bra.s     .BigLoop
  1561. .MinOk:
  1562.  
  1563.      move.l    guir_DTA_MaxHeight(a0),d0
  1564.      beq.s     .Next
  1565.  
  1566.      cmp.l     d4,d0
  1567.      bcc.s     .Next
  1568.      move.l    d0,gd_Height(a0)
  1569.      sub.l     d0,d5
  1570.      sub.l     d3,d7
  1571.      moveq     #1,d1
  1572.      move.l    d1,gd_Top(a0)
  1573.      bra.s     .BigLoop
  1574.  
  1575. .Fixed:
  1576.      move.l    gd_Top(a0),d0
  1577.      eor.l     d1,d0
  1578.      beq.s     .Next
  1579.  
  1580.      move.l    gd_Height(a0),d0
  1581.      add.l     d5,d0
  1582.      move.l    guir_DTA_Weight(a0),d2
  1583.      mulu      d2,d0
  1584.      add.l     d7,d2
  1585.      divu      d2,d0
  1586.  
  1587.      moveq     #0,d3
  1588.      swap      d0
  1589.      lsl.w     #1,d0
  1590.      swap      d0
  1591.      addx.l    d3,d0
  1592.      ext.l     d0
  1593.  
  1594.      move.l    guir_DTA_MinHeight(a0),d3
  1595.      cmp.l     d3,d0
  1596.      bcs.s     .Next
  1597.  
  1598.      move.l    guir_DTA_MaxHeight(a0),d3
  1599.      beq.s     .AhhRâaah
  1600.      cmp.l     d0,d3
  1601.      bcs.s     .Next
  1602.  
  1603. .AhhRâaah:
  1604.      add.l     gd_Height(a0),d5
  1605.      clr.l     gd_Height(a0)
  1606.      move.l    d2,d7
  1607.      bra.s     .BigLoop
  1608.  
  1609. .Next:
  1610.      move.l    d6,a0
  1611.      bra       .Loop
  1612.  
  1613. .Ok:
  1614.      move.l    gd_Top(a1),d2
  1615.  
  1616. .PosLoop:
  1617.      move.l    (a5),d6
  1618.      beq.s     .AllDone
  1619.  
  1620.      LBLOCKEAI GuiRootClass_ID,a5,a0
  1621.  
  1622.      move.l    d2,gd_Top(a0)
  1623.  
  1624.      move.l    gd_Height(a0),d3
  1625.      bne.s     .PLHOk
  1626.  
  1627.      move.l    guir_DTA_Weight(a0),d3
  1628.      mulu      d5,d3
  1629.      divu      d7,d3
  1630.  
  1631.      moveq     #0,d0
  1632.      swap      d3
  1633.      lsl.w     #1,d3
  1634.      swap      d3
  1635.      addx.l    d0,d3
  1636.      ext.l     d3
  1637.  
  1638.      move.l    d3,gd_Height(a0)
  1639. .PLHOk:
  1640.  
  1641.      add.l     d3,d2
  1642.      move.l    d2,gd_Bottom(a0)
  1643.      add.l     a3,d2
  1644.  
  1645.      DOMTDI    GCM_Layout,a5
  1646.      tst.l     d0
  1647.      bne.s     .Fail
  1648.  
  1649.      move.l    d6,a5
  1650.      bra.s     .PosLoop
  1651.  
  1652. .AllDone:
  1653.      moveq     #0,d0
  1654. .Fail:
  1655.      movem.l   (a7)+,d2-7/a2-3/a5-6
  1656.      rts
  1657.  
  1658. VGRAWN:
  1659.      dc.l      VGRName
  1660.      dc.l      GRPAllWNull
  1661. VGRName:
  1662.      dc.b      "VGroupClass",0
  1663.      even
  1664. ;fe
  1665. ;fs "HKnobClass"
  1666. _HKnobClass:
  1667.      dc.l      0
  1668.      dc.l      _GuiRootClass
  1669.      dc.l      0,0,0,0,0
  1670.      dc.l      hkb_DataSize
  1671.      dc.l      empty_Funcs
  1672.      dc.l      hhandle_data
  1673.      dc.l      0
  1674.      dc.l      hhandle_Init
  1675.  
  1676. hhandle_data:
  1677.      dc.l      0,0,0,0
  1678.  
  1679. hhandle_Init:
  1680.      LBLOCKEAI GuiRootClass_ID,a2,a3
  1681.      add.l     a1,a3
  1682.  
  1683.      moveq     #0,d0
  1684.      move.l    d0,guir_DTA_MinWidth(a3)
  1685.      moveq     #2,d0
  1686.      move.l    d0,guir_DTA_MinHeight(a3)
  1687.      move.l    d0,guir_DTA_MaxHeight(a3)
  1688.  
  1689.      move.l    #GCM_Layout,d0
  1690.      lea       HKBLayout,a1
  1691.      bsr       _SetMethod
  1692.      move.l    #GCM_Render,d0
  1693.      lea       HKBRender,a1
  1694.      bsr       _SetMethod
  1695.      move.l    #GCM_Click,d0
  1696.      lea       HKBClick,a1
  1697.      bsr       _SetMethod
  1698.      move.l    #GCM_Handle,d0
  1699.      lea       HKBHandler,a1
  1700.      bsr       _SetMethod
  1701.      rts
  1702.  
  1703. HKBLayout:
  1704.      move.l    d2,-(a7)
  1705.  
  1706.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1707.      move.l    gd_Top(a1),d2
  1708.  
  1709.      move.l    4(a0),a1
  1710.      tst.l     4(a1)
  1711.      beq.s     .ErrAtBegin
  1712.  
  1713.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1714.      move.l    guir_DTA_Weight(a1),d1
  1715.  
  1716.      move.l    gd_Height(a1),d0
  1717.      sub.l     d0,d2
  1718.  
  1719.      add.l     guir_DTA_MinHeight(a1),d2
  1720.  
  1721.      move.l    (a0),a1
  1722.      tst.l     (a1)
  1723.      beq.s     .ErrAtEnd
  1724.  
  1725.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1726.      add.l     guir_DTA_Weight(a1),d1
  1727.      beq.s     .Err2NullWeights
  1728.  
  1729.      LBLOCKEAI HKnobClass_ID,a0,a1
  1730.      movem.l   d0-2,hkb_HKDT_TotSize(a1)
  1731.  
  1732.      moveq     #0,d0
  1733. .Fail:
  1734.      move.l    (a7)+,d2
  1735.      rts
  1736.  
  1737. .ErrAtBegin:
  1738.      lea       HKBAB(pc),a0
  1739.      move.l    a0,d0
  1740.      bra.s     .Fail
  1741.  
  1742. .ErrAtEnd:
  1743.      lea       HKBAE(pc),a0
  1744.      move.l    a0,d0
  1745.      bra.s     .Fail
  1746.  
  1747. .Err2NullWeights:
  1748.      lea       HKB2NW(pc),a0
  1749.      move.l    a0,d0
  1750.      bra.s     .Fail
  1751.  
  1752. HKBRender:
  1753.      movem.l   d2-4,-(a7)
  1754.      move.l    _CurrentDomain(pc),-(a7)
  1755.  
  1756.      move.l    (a0),a1
  1757.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1758.      move.l    gd_Height(a1),d1
  1759.      move.l    d1,d2
  1760.      sub.l     guir_DTA_MinHeight(a1),d1
  1761.  
  1762.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1763.  
  1764.      add.l     gd_Top(a1),d1
  1765.      LBLOCKEAI HKnobClass_ID,a0,a0
  1766.      move.l    d1,hkb_HKDT_MaxPos(a0)
  1767.      add.l     d2,hkb_HKDT_TotSize(a0)
  1768.  
  1769.      moveq     #0,d0
  1770.      move.l    a1,_CurrentDomain
  1771.      moveq     #0,d1
  1772.      move.l    gd_Width(a1),d2
  1773.      moveq     #2,d3
  1774.      sf        d4
  1775.      bsr       _DrawBevelBox
  1776.  
  1777.      move.l    (a7)+,_CurrentDomain
  1778.      movem.l   (a7)+,d2-4
  1779.      rts
  1780.  
  1781. HKBClick:
  1782.      move.l    d2,-(a7)
  1783.  
  1784.      move.l    d0,_MinMouseX
  1785.      move.l    d0,_MaxMouseX
  1786.  
  1787.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1788.      move.l    gd_Top(a1),d2
  1789.      sub.l     d1,d2
  1790.      move.l    d1,HKBOffset
  1791.  
  1792.      LBLOCKEAI HKnobClass_ID,a0,a1
  1793.  
  1794.      sub.l     _GuiPos(pc),d2
  1795.      movem.l   hkb_HKDT_MinPos(a1),d0-1
  1796.      sub.l     d2,d0
  1797.      move.l    d0,_MinMouseY
  1798.      sub.l     d2,d1
  1799.      move.l    d1,_MaxMouseY
  1800.  
  1801.      sf        HKBFlag
  1802.  
  1803.      move.l    a0,_ActiveGuiObject
  1804.      move.l    (a7)+,d2
  1805.      rts
  1806.  
  1807. HKBHandler:
  1808.      movem.l   d3-7/a2,-(a7)
  1809.      move.l    _CurrentDomain(pc),-(a7)
  1810.  
  1811.      LBLOCKEAI GuiRootClass_ID,a0,a1
  1812.      move.l    a1,_CurrentDomain
  1813.  
  1814.      moveq     #-1,d3
  1815.      moveq     #0,d4
  1816.      move.l    gd_Width(a1),d6
  1817.      moveq     #2,d7
  1818.      move.l    HKBPos(pc),d5
  1819.  
  1820.      btst      #6,$bfe001
  1821.      bne.s     .Release
  1822.  
  1823.      sub.l     HKBOffset(pc),d1
  1824.      move.l    d1,HKBPos
  1825.      tst.b     HKBFlag
  1826.      beq.s     .DontErase
  1827.  
  1828.      cmp.l     d1,d5
  1829.      beq.s     .Done
  1830.  
  1831.      tst.b     HKBFlag
  1832.      beq.s     .DontErase
  1833.      bsr       _DrawRectangle
  1834. .DontErase:
  1835.      move.l    d1,d5
  1836.      bsr       _DrawRectangle
  1837.      st        HKBFlag
  1838.  
  1839. .Done:
  1840.      move.l    (a7)+,_CurrentDomain
  1841.      movem.l   (a7)+,d3-7/a2
  1842.      rts
  1843.  
  1844. .Release:
  1845.      tst.b     HKBFlag
  1846.      beq.s     .DontErase2
  1847.      bsr       _DrawRectangle
  1848. .DontErase2:
  1849.  
  1850.      clr.l     _ActiveGuiObject
  1851.  
  1852.      clr.l     _MinMouseX
  1853.      clr.l     _MinMouseY
  1854.  
  1855.      move.l    #GuiScreenWidth,_MaxMouseX
  1856.      move.l    #256,_MaxMouseY
  1857.  
  1858.      tst.l     d5
  1859.      beq.s     .Done
  1860.  
  1861.      LBLOCKEAI HKnobClass_ID,a0,a1
  1862.      movem.l   hkb_HKDT_TotSize(a1),d0-1
  1863.  
  1864.      move.l    4(a0),a1
  1865.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1866.  
  1867.      move.l    gd_Height(a1),d3
  1868.      add.l     d5,d3
  1869.      mulu      d1,d3
  1870.      divu      d0,d3
  1871.  
  1872.      moveq     #0,d4
  1873.      swap      d3
  1874.      lsl.w     #1,d3
  1875.      swap      d3
  1876.      addx.l    d4,d3
  1877.      ext.l     d3
  1878.  
  1879.      move.l    d3,guir_DTA_Weight(a1)
  1880.  
  1881.      move.l    (a0),a1
  1882.      LBLOCKEAI GuiRootClass_ID,a1,a1
  1883.      sub.l     d3,d1
  1884.      move.l    d1,guir_DTA_Weight(a1)
  1885.  
  1886.      LDATALI   DTA_Parent,a0,a2
  1887.      DOMTDI    GCM_Layout,a2
  1888.      DOMTDI    GCM_Clear,a2
  1889.      DOMTDI    GCM_Render,a2
  1890.  
  1891.      move.l    (a7)+,_CurrentDomain
  1892.      movem.l   (a7)+,d3-7/a2
  1893.      rts
  1894.  
  1895. HKBOffset:
  1896.      ds.l      1
  1897. HKBPos:
  1898.      ds.l      1
  1899. HKBFlag:
  1900.      dc.l      0
  1901.  
  1902. HKBAB:
  1903.      dc.l      HKBName
  1904.      dc.l      KNBAtBeg
  1905. HKBAE:
  1906.      dc.l      HKBName
  1907.      dc.l      KNBAtEnd
  1908. HKB2NW:
  1909.      dc.l      HKBName
  1910.      dc.l      KNB2Null
  1911.  
  1912. HKBName:
  1913.      dc.b      "HKnobClass",0
  1914.      even
  1915. ;fe
  1916. ;fs "Common group code"
  1917. ;fs "_GRPRender"
  1918. _GRPRender:
  1919.      movem.l   d2/a2,-(a7)
  1920.  
  1921.      LBLOCKEAI RootClass_ID,a0,a2
  1922.      move.l    (a2),a2
  1923.  
  1924. .Loop:
  1925.      move.l    (a2),d2
  1926.      beq.s     .Done
  1927.      DOMTDI    GCM_Render,a2
  1928.      move.l    d2,a2
  1929.      bra.s     .Loop
  1930.  
  1931. .Done:
  1932.      movem.l   (a7)+,d2/a2
  1933.      rts
  1934. ;fe
  1935. ;fs "_GRPClick"
  1936. _GRPClick:
  1937.      movem.l   d2/a2,-(a7)
  1938.  
  1939.      LBLOCKEAI RootClass_ID,a0,a2
  1940.      move.l    (a2),a2
  1941.  
  1942. .Loop:
  1943.      move.l    (a2),d2
  1944.      beq.s     .Done
  1945.  
  1946.      LBLOCKEAI GuiRootClass_ID,a2,a0
  1947.  
  1948.      cmp2.l    gd_Left(a0),d0
  1949.      bcs.s     .NoClick
  1950.  
  1951.      cmp2.l    gd_Top(a0),d1
  1952.      bcc.s     .Bingo
  1953.  
  1954. .NoClick:
  1955.      move.l    d2,a2
  1956.      bra.s     .Loop
  1957.  
  1958. .Done:
  1959.      moveq     #0,d0
  1960.      movem.l   (a7)+,d2/a2
  1961.      rts
  1962.  
  1963. .Bingo:
  1964.      DOMTDI    GCM_Click,a2
  1965.      moveq     #1,d0
  1966.      movem.l   (a7)+,d2/a2
  1967.      rts
  1968. ;fe
  1969. GRPAllWNull:
  1970.      dc.b      "All objects weights are zero",0
  1971.      even
  1972. ;fe
  1973. ;fs "Common knob datas"
  1974. KNBAtBeg:
  1975.      dc.b      "Knob is at the begin of a group",0
  1976. KNBAtEnd:
  1977.      dc.b      "Knob is at the end of a group",0
  1978. KNB2Null:
  1979.      dc.b      "Knob is between two objects with null weights",0
  1980.      even
  1981. ;fe
  1982. ;fs "EmptyClass"
  1983. _EmptyClass:
  1984.      dc.l      0
  1985.      dc.l      _GuiRootClass
  1986.      dc.l      0,0,0,0,0
  1987.      dc.l      0
  1988.      dc.l      empty_Funcs
  1989.      dc.l      0
  1990.      dc.l      0
  1991.      dc.l      empty_Init
  1992.  
  1993. empty_Funcs:
  1994.      dc.l      0
  1995.  
  1996. empty_Init:
  1997.      LBLOCKEAI GuiRootClass_ID,a2,a3
  1998.      add.l     a1,a3
  1999.      clr.l     guir_DTA_MinWidth(a3)
  2000.      clr.l     guir_DTA_MinHeight(a3)
  2001.      rts
  2002. ;fe
  2003. ;fs "ButtonClass"
  2004. _ButtonClass:
  2005.      dc.l      0
  2006.      dc.l      _GuiRootClass
  2007.      dc.l      0,0,0,0,0
  2008.      dc.l      btn_DataSize
  2009.      dc.l      button_Funcs
  2010.      dc.l      button_data
  2011.      dc.l      0
  2012.      dc.l      button_Init
  2013.  
  2014. button_data:
  2015.      dc.l      0,0,0,0
  2016.  
  2017. button_Funcs:
  2018.      dc.l      0
  2019.  
  2020. button_Init:
  2021.      LBLOCKEAI GuiRootClass_ID,a2,a3
  2022.      add.l     a1,a3
  2023.  
  2024.      moveq     #12,d0
  2025.      move.l    d0,guir_DTA_MinHeight(a3)
  2026.      move.l    d0,guir_DTA_MaxHeight(a3)
  2027.      clr.l     guir_DTA_MaxWidth(a3)
  2028.  
  2029.      move.l    #GCM_GetMinMax,d0
  2030.      lea       BTNGetMinMax,a1
  2031.      bsr       _SetMethod
  2032.      move.l    #GCM_Layout,d0
  2033.      lea       BTNLayout,a1
  2034.      bsr       _SetMethod
  2035.      move.l    #GCM_Render,d0
  2036.      lea       BTNRender,a1
  2037.      bsr       _SetMethod
  2038.      move.l    #GCM_Click,d0
  2039.      lea       BTNClick,a1
  2040.      bsr       _SetMethod
  2041.      move.l    #GCM_Handle,d0
  2042.      lea       BTNHandler,a1
  2043.      bsr       _SetMethod
  2044.      rts
  2045.  
  2046. BTNGetMinMax:
  2047.      movem.l   a2-3,-(a7)
  2048.      LBLOCKEAI ButtonClass_ID,a0,a1
  2049.      move.l    (a1),a2
  2050.      move.l    a2,a3
  2051.  
  2052. .StrLen:
  2053.      tst.b     (a3)+
  2054.      bne.s     .StrLen
  2055.      sub.l     a2,a3
  2056.      move.l    a3,d0
  2057.      lsl.l     #3,d0
  2058.  
  2059.      LBLOCKEAI GuiRootClass_ID,a0,a2
  2060.      move.l    d0,guir_DTA_MinWidth(a2)
  2061.  
  2062.      subq.l    #8,d0
  2063.      move.l    d0,btn_BDTA_TextWidth(a1)
  2064.      movem.l   (a7)+,a2-3
  2065.      rts
  2066.  
  2067. BTNLayout:
  2068.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2069.      move.l    gd_Width(a1),d0
  2070.      LBLOCKEAI ButtonClass_ID,a0,a1
  2071.      sub.l     btn_BDTA_TextWidth(a1),d0
  2072.      lsr.l     #1,d0
  2073.      move.l    d0,btn_BDTA_TextX(a1)
  2074.      moveq     #0,d0
  2075.      rts
  2076.  
  2077. BTNRender:
  2078.      movem.l   d2-7/a5,-(a7)
  2079.      move.l    _CurrentDomain(pc),-(a7)
  2080.  
  2081.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2082.      move.l    a1,_CurrentDomain
  2083.  
  2084.      moveq     #0,d0
  2085.      moveq     #0,d1
  2086.      move.l    gd_Width(a1),d2
  2087.      move.l    gd_Height(a1),d3
  2088.      sf        d4
  2089.      bsr       _DrawBevelBox
  2090.  
  2091.      LBLOCKEAI ButtonClass_ID,a0,a1
  2092.      move.l    btn_BDTA_TextX(a1),d6
  2093.      moveq     #2,d7
  2094.      move.l    (a1),a5
  2095.      moveq     #1,d4
  2096.      moveq     #0,d5
  2097.      bsr       _DrawText
  2098.  
  2099.      move.l    (a7)+,_CurrentDomain
  2100.      movem.l   (a7)+,d2-7/a5
  2101.      rts
  2102.  
  2103. BTNClick:
  2104.      clr.l     BTNReptCount
  2105.      move.l    a0,_ActiveGuiObject
  2106.      sf        BTNPressed
  2107.  
  2108. BTNHandler:
  2109.      movem.l   d2-7/a5,-(a7)
  2110.      move.l    _CurrentDomain(pc),-(a7)
  2111.  
  2112.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2113.      move.l    a1,_CurrentDomain
  2114.  
  2115.      btst      #6,$bfe001
  2116.      bne.s     .Desactivate
  2117.  
  2118.      move.b    BTNPressed(pc),d2
  2119.  
  2120.      cmp2.l    gd_Left(a1),d0
  2121.      scc       d0
  2122.  
  2123.      cmp2.l    gd_Top(a1),d1
  2124.      scc       d1
  2125.  
  2126.      and.b     d1,d0
  2127.      move.b    d0,BTNPressed
  2128.  
  2129.      eor.b     d0,d2
  2130.      beq.s     .DoRepeat
  2131.  
  2132.      tst.b     d0
  2133.      bne.s     .Press
  2134.  
  2135.      bsr.s     .Release
  2136.  
  2137. .Done:
  2138.      move.l    (a7)+,_CurrentDomain
  2139.      movem.l   (a7)+,d2-7/a5
  2140.      rts
  2141.  
  2142. .DoRepeat:
  2143.      tst.b     d0
  2144.      beq.s     .Done
  2145.      move.l    BTNReptCount,d0
  2146.      beq.s     .Done
  2147.      subq.l    #1,d0
  2148.      bne.s     .ReptOk
  2149.      LBLOCKEAI ButtonClass_ID,a0,a1
  2150.      move.l    btn_BDTA_Repeat(a1),BTNReptCount
  2151.      bra.s     .CallHook
  2152.  
  2153. .ReptOk:
  2154.      move.l    d0,BTNReptCount
  2155.      bra.s     .Done
  2156.  
  2157. .Release:
  2158.      moveq     #0,d3
  2159.      moveq     #2,d4
  2160.      moveq     #1,d5
  2161.      movem.l   gd_Width(a1),d6-7
  2162.      subq.l    #4,d6
  2163.      subq.l    #2,d7
  2164.      bsr       _DrawRectangle
  2165.  
  2166.      bsr       BTNRender
  2167.      rts
  2168.  
  2169. .Press:
  2170.      move.l    a1,a2
  2171.  
  2172.      moveq     #3,d3
  2173.      moveq     #2,d4
  2174.      moveq     #1,d5
  2175.      movem.l   gd_Width(a2),d6-7
  2176.      subq.l    #4,d6
  2177.      subq.l    #2,d7
  2178.      bsr       _DrawRectangle
  2179.  
  2180.      moveq     #0,d0
  2181.      moveq     #0,d1
  2182.      movem.l   gd_Width(a2),d2-3
  2183.      st        d4
  2184.      bsr       _DrawBevelBox
  2185.  
  2186.      LBLOCKEAI ButtonClass_ID,a0,a1
  2187.  
  2188.      move.l    btn_BDTA_TextX(a1),d6
  2189.      moveq     #2,d7
  2190.      move.l    (a1),a5
  2191.      moveq     #1,d4
  2192.      moveq     #0,d5
  2193.      bsr       _DrawText
  2194.  
  2195.      move.l    btn_BDTA_Repeat(a1),BTNReptCount
  2196.      bne.s     .CallHook
  2197.  
  2198.      move.l    (a7)+,_CurrentDomain
  2199.      movem.l   (a7)+,d2-7/a5
  2200.      rts
  2201.  
  2202. .Desactivate:
  2203.      clr.l     _ActiveGuiObject
  2204.  
  2205.      tst.b     BTNPressed
  2206.      beq.s     .Done
  2207.  
  2208.      bsr.s     .Release
  2209.  
  2210.      tst.l     BTNReptCount
  2211.      bne.s     .Done
  2212.  
  2213. .CallHook:
  2214.      LBLOCKEAI GuiRootClass_ID,a0,a5
  2215.      move.l    guir_DTA_Hook(a5),d0
  2216.      beq.s     .Done
  2217.      move.l    d0,a1
  2218.      move.l    guir_DTA_HookData(a5),d0
  2219.      jsr       (a1)
  2220.  
  2221.      move.l    (a7)+,_CurrentDomain
  2222.      movem.l   (a7)+,d2-7/a5
  2223.      rts
  2224.  
  2225. BTNReptCount:
  2226.      dc.l      0
  2227. BTNPressed:
  2228.      ds.b      1
  2229.      even
  2230. ;fe
  2231. ;fs "DragBarClass"
  2232. _DragBarClass:
  2233.      dc.l      0
  2234.      dc.l      _ButtonClass
  2235.      dc.l      0,0,0,0,0
  2236.      dc.l      0
  2237.      dc.l      empty_Funcs
  2238.      dc.l      0
  2239.      dc.l      0
  2240.      dc.l      dragbar_Init
  2241.  
  2242. dragbar_Init:
  2243.      move.l    #GCM_Click,d0
  2244.      lea       DRBClick,a1
  2245.      bsr       _SetMethod
  2246.      move.l    #GCM_Handle,d0
  2247.      lea       DRBHandler,a1
  2248.      bsr       _SetMethod
  2249.      rts
  2250.  
  2251. DRBClick:
  2252.      move.l    d0,_MinMouseX
  2253.      move.l    d0,_MaxMouseX
  2254.  
  2255.      move.l    a0,_ActiveGuiObject
  2256.  
  2257.      move.l    d1,DRBOffset
  2258.      move.w    GuiSelP,d0
  2259.      sub.w     GuiP,d0
  2260.      move.w    d0,DRBSelOffset
  2261.  
  2262.      move.l    d1,d0
  2263.      add.l     _MinGuiPos(pc),d0
  2264.      move.l    d0,_MinMouseY
  2265.  
  2266.      add.l     _MaxGuiPos(pc),d1
  2267.      move.l    d1,_MaxMouseY
  2268.  
  2269.      lea       DRBMouseHook(pc),a0
  2270.      move.l    a0,_MouseHook
  2271.  
  2272.      ;move.l    #CopEnd,_GuiL1Ptr
  2273.      rts
  2274.  
  2275. DRBHandler:
  2276.      btst      #6,$bfe001
  2277.      beq.s     .Ok
  2278.  
  2279.      clr.l     _MouseHook
  2280.      clr.l     _ActiveGuiObject
  2281.  
  2282.      clr.l     _MinMouseX
  2283.      clr.l     _MinMouseY
  2284.  
  2285.      move.l    #GuiScreenWidth,_MaxMouseX
  2286.      move.l    #256,_MaxMouseY
  2287.  
  2288.      move.l    _CurrentGuiObject,a0
  2289.      DOMTDJI   GM_Move,a0
  2290.  
  2291. .Ok:
  2292.      rts
  2293.  
  2294. DRBMouseHook:
  2295.      move.l    _MouseY(pc),d0
  2296.      sub.l     DRBOffset(pc),d0
  2297.      move.l    d0,_GuiPos
  2298.  
  2299.      add.l     #$28,d0
  2300.      move.w    d0,GuiP
  2301.  
  2302.      add.w     DRBSelOffset,d0
  2303.      move.w    d0,GuiSelP
  2304.      rts
  2305.  
  2306. DRBOffset:
  2307.      ds.l      1
  2308. DRBSelOffset:
  2309.      ds.w      1
  2310. ;fe
  2311. ;fs "SmallButtonClass"
  2312. _SmallButtonClass:
  2313.      dc.l      0
  2314.      dc.l      _ButtonClass
  2315.      dc.l      0,0,0,0,0
  2316.      dc.l      sbtn_DataSize
  2317.      dc.l      empty_Funcs
  2318.      dc.l      smallbutton_data
  2319.      dc.l      0
  2320.      dc.l      smallbutton_Init
  2321.  
  2322. smallbutton_data:
  2323.      dc.l      " ",0,0
  2324.  
  2325. smallbutton_Init:
  2326.      move.l    #GCM_GetMinMax,d0
  2327.      lea       SBTGetMinMax,a1
  2328.      bsr       _SetMethod
  2329.      move.l    d0,SBTSGetMinMax
  2330.      rts
  2331.  
  2332. SBTSGetMinMax:
  2333.      ds.l      1
  2334.  
  2335. SBTGetMinMax:
  2336.      move.l    a2,-(a7)
  2337.  
  2338.      move.l    a0,a2
  2339.  
  2340.      LDATAEAI  SBDT_Char,a0,a1
  2341.  
  2342. .Loop:
  2343.      tst.b     (a1)+
  2344.      beq.s     .Loop
  2345.      subq.l    #1,a1
  2346.  
  2347.      SDATALI   a1,BDTA_Label,a0
  2348.  
  2349.      move.l    a2,a0
  2350.      move.l    SBTSGetMinMax(pc),a1
  2351.      jsr       (a1)
  2352.  
  2353.      LBLOCKEAI GuiRootClass_ID,a2,a1
  2354.      move.l    guir_DTA_MinWidth(a1),d0
  2355.  
  2356.      LDATALI   SBDT_Width,a2,d1
  2357.      beq.s     .Ok
  2358.      move.l    d1,d0
  2359.      move.l    d0,guir_DTA_MinWidth(a1)
  2360. .Ok:
  2361.  
  2362.      move.l    d0,guir_DTA_MaxWidth(a1)
  2363.  
  2364.      move.l    (a7)+,a2
  2365.      rts
  2366. ;fe
  2367. ;fs "TextClass"
  2368. _TextClass:
  2369.      dc.l      0
  2370.      dc.l      _GuiRootClass
  2371.      dc.l      0,0,0,0,0
  2372.      dc.l      txt_DataSize
  2373.      dc.l      empty_Funcs
  2374.      dc.l      text_data
  2375.      dc.l      0
  2376.      dc.l      text_Init
  2377.  
  2378. text_data:
  2379.      dc.l      0,0
  2380.  
  2381. text_Funcs:
  2382.      dc.l      0
  2383.  
  2384. text_Init:
  2385.      move.l    #GCM_GetMinMax,d0
  2386.      lea       TXTGetMinMax,a1
  2387.      bsr       _SetMethod
  2388.      move.l    #GCM_Render,d0
  2389.      lea       TXTRender,a1
  2390.      bsr       _SetMethod
  2391.      rts
  2392.  
  2393. TXTGetMinMax:
  2394.      movem.l   d2-3/a2-4/a6,-(a7)
  2395.  
  2396.      move.l    a0,a4
  2397.      LBLOCKEAI TextClass_ID,a0,a0
  2398.  
  2399.      move.l    txt_TDTA_Text(a0),a1
  2400.      move.l    txt_TDTA_FData(a0),d0
  2401.      beq.s     .TrucEtTout
  2402.  
  2403.      move.l    a0,-(a7)
  2404.      move.l    (AbsExecBase).w,a6
  2405.      move.l    a1,a0
  2406.      move.l    d0,a1
  2407.      lea       TXTPutChar(pc),a2
  2408.      lea       _StrBuf,a3
  2409.      CALL      RawDoFmt
  2410.      move.l    (a7)+,a0
  2411.      lea       _StrBuf,a1
  2412.      lea       CustomBase,a6
  2413.  
  2414.      moveq     #0,d0
  2415.  
  2416. .TrucEtTout:
  2417.      moveq     #0,d1
  2418.  
  2419. .LLoop:
  2420.      addq.l    #1,d0
  2421.      move.l    a1,a2
  2422.  
  2423. .CLoop:
  2424.      move.b    (a2)+,d2
  2425.      beq.s     .CLDone
  2426.      cmp.b     #$a,d2
  2427.      bne.s     .CLoop
  2428. .CLDone:
  2429.  
  2430.      move.l    a2,d3
  2431.      sub.l     a1,d3
  2432.  
  2433.      cmp.l     d3,d1
  2434.      bcc.s     .Baâââh
  2435.      move.l    d3,d1
  2436. .Baâââh:
  2437.  
  2438.      move.l    a2,a1
  2439.      tst.b     d2
  2440.      bne.s     .LLoop
  2441.  
  2442.      lsl.l     #3,d0
  2443.      LBLOCKEAI GuiRootClass_ID,a4,a0
  2444.      move.l    d0,guir_DTA_MinHeight(a0)
  2445.      move.l    d0,guir_DTA_MaxHeight(a0)
  2446.  
  2447.      subq.l    #1,d1
  2448.      lsl.l     #3,d1
  2449.  
  2450.      move.l    d1,guir_DTA_MinWidth(a0)
  2451.  
  2452.      movem.l   (a7)+,d2-3/a2-4/a6
  2453.      rts
  2454.  
  2455. TXTRender:
  2456.      movem.l   d2/d4-7/a2-3/a5-6,-(a7)
  2457.      move.l    _CurrentDomain(pc),-(a7)
  2458.  
  2459.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2460.      move.l    a1,_CurrentDomain
  2461.  
  2462.      move.l    gd_Width(a1),d1
  2463.  
  2464.      LBLOCKEAI TextClass_ID,a0,a0
  2465.      move.l    txt_TDTA_Text(a0),a5
  2466.      moveq     #0,d7
  2467.      move.l    txt_TDTA_FData(a0),d0
  2468.      beq.s     .LLoop
  2469.  
  2470.      movem.l   d1/a1,-(a7)
  2471.      move.l    (AbsExecBase).w,a6
  2472.      move.l    a5,a0
  2473.      move.l    d0,a1
  2474.      lea       TPutChar(pc),a2
  2475.      lea       _StrBuf,a3
  2476.      CALL      RawDoFmt
  2477.      lea       _StrBuf,a5
  2478.      lea       CustomBase,a6
  2479.      movem.l   (a7)+,d1/a1
  2480.  
  2481. .LLoop:
  2482.      move.l    a5,a1
  2483.  
  2484. .CLoop:
  2485.      move.b    (a1)+,d2
  2486.      beq.s     .CLDone
  2487.      cmp.b     #$a,d2
  2488.      bne.s     .CLoop
  2489. .CLDone:
  2490.      move.l    a1,d5
  2491.      sub.l     a5,d5
  2492.      subq.l    #1,d5
  2493.      beq.s     .Poisse
  2494.  
  2495.      move.l    d5,d0
  2496.      lsl.l     #3,d0
  2497.      move.l    d1,d6
  2498.      sub.l     d0,d6
  2499.      lsr.l     #1,d6
  2500.  
  2501.      moveq     #1,d4
  2502.      bsr       _DrawText
  2503.  
  2504. .Poisse:
  2505.      move.l    a1,a5
  2506.      addq.l    #8,d7
  2507.  
  2508.      tst.b     d2
  2509.      bne.s     .LLoop
  2510.  
  2511.      move.l    (a7)+,_CurrentDomain
  2512.      movem.l   (a7)+,d2/d4-7/a2-3/a5-6
  2513.      rts
  2514.  
  2515. TXTPutChar:
  2516.      move.b    d0,(a3)+
  2517.      rts
  2518. ;fe
  2519. ;fs "FixedTextClass"
  2520. _FixedTextClass:
  2521.      dc.l      0
  2522.      dc.l      _TextClass
  2523.      dc.l      0,0,0,0,0
  2524.      dc.l      0
  2525.      dc.l      empty_Funcs
  2526.      dc.l      0
  2527.      dc.l      0
  2528.      dc.l      ftext_Init
  2529.  
  2530. ftext_Init:
  2531.      move.l    #GCM_GetMinMax,d0
  2532.      lea       FTXGetMinMax,a1
  2533.      bsr       _SetMethod
  2534.      move.l    d0,FTXSGetMinMax
  2535.      rts
  2536.  
  2537. FTXSGetMinMax:
  2538.      ds.l      1
  2539.  
  2540. FTXGetMinMax:
  2541.      move.l    a2,-(a7)
  2542.  
  2543.      move.l    a0,a2
  2544.  
  2545.      move.l    FTXSGetMinMax(pc),a1
  2546.      jsr       (a1)
  2547.  
  2548.      LBLOCKEAI GuiRootClass_ID,a2,a0
  2549.      move.l    guir_DTA_MinWidth(a0),guir_DTA_MaxWidth(a0)
  2550.  
  2551.      move.l    (a7)+,a2
  2552.      rts
  2553. ;fe
  2554. ;fs "HPropClass"
  2555. _HPropClass:
  2556.      dc.l      0
  2557.      dc.l      _GuiRootClass
  2558.      dc.l      0,0,0,0,0
  2559.      dc.l      hpr_DataSize
  2560.      dc.l      hprop_Funcs
  2561.      dc.l      hprop_data
  2562.      dc.l      0
  2563.      dc.l      hprop_Init
  2564.  
  2565. hprop_data:
  2566.      dc.l      1,10,1
  2567.  
  2568. hprop_Funcs:
  2569.      dc.l      HPRDecr
  2570.      dc.l      HPRIncr
  2571.      dc.l      0
  2572.  
  2573. hprop_Init:
  2574.      LBLOCKEAI GuiRootClass_ID,a2,a3
  2575.      add.l     a1,a3
  2576.  
  2577.      moveq     #12,d0
  2578.      move.l    d0,guir_DTA_MinHeight(a3)
  2579.      move.l    d0,guir_DTA_MaxHeight(a3)
  2580.      clr.l     guir_DTA_MaxWidth(a3)
  2581.      move.l    #50,guir_DTA_MinWidth(a3)
  2582.  
  2583.      move.l    #GCM_Layout,d0
  2584.      lea       HPRLayout,a1
  2585.      bsr       _SetMethod
  2586.      move.l    #GCM_Render,d0
  2587.      lea       HPRRender,a1
  2588.      bsr       _SetMethod
  2589.      move.l    #GCM_Click,d0
  2590.      lea       HPRClick,a1
  2591.      bsr       _SetMethod
  2592.      move.l    #GCM_Handle,d0
  2593.      lea       HPRHandler,a1
  2594.      bsr       _SetMethod
  2595.      rts
  2596.  
  2597. HPRLayout:
  2598.      movem.l   d2-5,-(a7)
  2599.  
  2600.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2601.      move.l    gd_Width(a1),d0
  2602.      subq.l    #8,d0
  2603.      move.l    d0,d1
  2604.  
  2605.      LBLOCKEAI HPropClass_ID,a0,a1
  2606.      move.l    hpr_HPDT_Total(a1),d2
  2607.  
  2608.      move.l    hpr_HPDT_Visible(a1),d3
  2609.      cmp.l     d2,d3
  2610.      bcc.s     .FullKnob
  2611.  
  2612.      mulu      d3,d1
  2613.      divu      d2,d1
  2614.      ext.l     d1
  2615.  
  2616.      cmp.l     #14,d1
  2617.      bcc.s     .FullKnob
  2618.      moveq     #14,d1
  2619.  
  2620. .FullKnob:
  2621.      move.l    d1,hpr_HPDT_KnobSize(a1)
  2622.  
  2623.      sub.l     d1,d0
  2624.      move.l    d0,hpr_HPDT_MaxPos(a1)
  2625.  
  2626.      bsr.s     HPRCalcKnobPos
  2627.  
  2628.      moveq     #0,d0
  2629.      movem.l   (a7)+,d2-5
  2630.      rts
  2631.  
  2632. HPRDecr:
  2633.      movem.l   d2-7,-(a7)
  2634.      move.l    _CurrentDomain(pc),-(a7)
  2635.  
  2636.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2637.      move.l    a1,_CurrentDomain
  2638.      LBLOCKEAI HPropClass_ID,a0,a1
  2639.      sub.l     #1,hpr_HPDT_Position(a1)
  2640.      bra.s     HPRUpdate
  2641.  
  2642. HPRIncr:
  2643.      movem.l   d2-7,-(a7)
  2644.      move.l    _CurrentDomain(pc),-(a7)
  2645.  
  2646.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2647.      move.l    a1,_CurrentDomain
  2648.      LBLOCKEAI HPropClass_ID,a0,a1
  2649.      add.l     #1,hpr_HPDT_Position(a1)
  2650.  
  2651. HPRUpdate:
  2652.      bsr.s     HPRClearKnob
  2653.      bsr.s     HPRCalcKnobPos
  2654.      move.l    d0,d7
  2655.  
  2656.      bsr.s     HPRRenderKnob
  2657.  
  2658.      tst.b     d7
  2659.      beq.s     .Groumpf
  2660.      move.l    hpr_HPDT_Position(a1),d1
  2661.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2662.      move.l    guir_DTA_Hook(a1),d2
  2663.      beq.s     .Groumpf
  2664.      move.l    guir_DTA_HookData(a1),d0
  2665.      move.l    d2,a1
  2666.      jsr       (a1)
  2667. .Groumpf:
  2668.  
  2669.      move.l    (a7)+,_CurrentDomain
  2670.      movem.l   (a7)+,d2-7
  2671.      rts
  2672.  
  2673. HPRCalcKnobPos:
  2674.      movem.l   hpr_HPDT_Total(a1),d1-2
  2675.      move.l    hpr_HPDT_Position(a1),d4
  2676.      move.l    d4,d5
  2677.      bpl.s     .MinOk
  2678.  
  2679.      moveq     #0,d5
  2680. .MinOk:
  2681.  
  2682.      move.l    d1,d3
  2683.      sub.l     d2,d3
  2684.      bpl.s     .Ok
  2685.      moveq     #0,d3
  2686. .Ok:
  2687.  
  2688.      cmp.l     d5,d3
  2689.      bcc.s     .MaxOk
  2690.      move.l    d3,d5
  2691. .MaxOk:
  2692.  
  2693.      move.l    d5,hpr_HPDT_Position(a1)
  2694.      move.l    d5,d0
  2695.  
  2696.      mulu      hpr_HPDT_MaxPos+2(a1),d0
  2697.      sub.l     d2,d1
  2698.      beq.s     .FullKnob
  2699.  
  2700.      divu      d1,d0
  2701.      ext.l     d0
  2702.  
  2703.      move.l    hpr_HPDT_MaxPos(a1),d1
  2704.      cmp.l     d0,d1
  2705.      bcc.s     .MaxPosOk
  2706.      move.l    d1,d0
  2707. .MaxPosOk:
  2708.  
  2709.      addq.l    #4,d0
  2710.      move.l    d0,hpr_HPDT_KnobPos(a1)
  2711.  
  2712.      cmp.l     d4,d5
  2713.      seq       d0
  2714.      rts
  2715.  
  2716. .FullKnob:
  2717.      moveq     #2,d0
  2718.      move.l    d0,hpr_HPDT_KnobPos(a1)
  2719.  
  2720.      cmp.l     d4,d5
  2721.      seq       d0
  2722.      rts
  2723.  
  2724. HPRRender:
  2725.      movem.l   d2-4,-(a7)
  2726.      move.l    _CurrentDomain(pc),-(a7)
  2727.  
  2728.      LBLOCKEAI HPropClass_ID,a0,a1
  2729.  
  2730.      LBLOCKEAI GuiRootClass_ID,a0,a0
  2731.      move.l    a0,_CurrentDomain
  2732.      moveq     #0,d0
  2733.      moveq     #0,d1
  2734.      movem.l   gd_Width(a0),d2-3
  2735.      sf        d4
  2736.      bsr.s     _DrawBevelBox
  2737.  
  2738.      moveq     #2,d0
  2739.      moveq     #1,d1
  2740.      movem.l   gd_Width(a0),d2-3
  2741.      subq.l    #4,d2
  2742.      subq.l    #2,d3
  2743.      st        d4
  2744.      bsr.s     _DrawBevelBox
  2745.  
  2746.      bsr.s     HPRRenderKnob
  2747.  
  2748.      move.l    (a7)+,_CurrentDomain
  2749.      movem.l   (a7)+,d2-4
  2750.      rts
  2751.  
  2752. HPRRenderKnob:
  2753.      moveq     #2,d1
  2754.      moveq     #8,d3
  2755.      movem.l   hpr_HPDT_KnobPos(a1),d0/d2
  2756.      sf        d4
  2757.      bsr.s     _DrawBevelBox
  2758.  
  2759.      moveq     #4,d1
  2760.      move.l    hpr_HPDT_KnobSize(a1),d0
  2761.      subq.l    #6,d0
  2762.      lsr.l     #1,d0
  2763.      add.l     hpr_HPDT_KnobPos(a1),d0
  2764.      bra.s     _DrawPropHole
  2765.  
  2766. HPRRenderKnobSelected:
  2767.      moveq     #2,d1
  2768.      moveq     #8,d3
  2769.      movem.l   hpr_HPDT_KnobPos(a1),d0/d2
  2770.      sf        d4
  2771.      bsr.s     _DrawBevelBox
  2772.  
  2773.      moveq     #3,d5
  2774.      moveq     #6,d7
  2775.      movem.l   hpr_HPDT_KnobPos(a1),d4/d6
  2776.      addq.l    #2,d4
  2777.      subq.l    #4,d6
  2778.      moveq     #3,d3
  2779.      bsr.s     _DrawRectangle
  2780.  
  2781.      moveq     #4,d1
  2782.      move.l    hpr_HPDT_KnobSize(a1),d0
  2783.      subq.l    #6,d0
  2784.      lsr.l     #1,d0
  2785.      add.l     hpr_HPDT_KnobPos(a1),d0
  2786.      bra.s     _DrawPropHole
  2787.  
  2788. HPRClearKnob:
  2789.      moveq     #2,d5
  2790.      moveq     #8,d7
  2791.      movem.l   hpr_HPDT_KnobPos(a1),d4/d6
  2792.      moveq     #0,d3
  2793.      bra.s     _DrawRectangle
  2794.  
  2795. HPRClick:
  2796.      movem.l   d2-7,-(a7)
  2797.      move.l    _CurrentDomain(pc),-(a7)
  2798.  
  2799.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2800.      move.l    a1,_CurrentDomain
  2801.  
  2802.      move.l    d0,d3
  2803.      sub.l     gd_Left(a1),d0
  2804.  
  2805.      LBLOCKEAI HPropClass_ID,a0,a1
  2806.  
  2807.      move.l    hpr_HPDT_KnobPos(a1),d2
  2808.      cmp.l     d2,d0
  2809.      bcs.s     .BeforeKnob
  2810.      add.l     hpr_HPDT_KnobSize(a1),d2
  2811.      cmp.l     d2,d0
  2812.      bcc.s     .AfterKnob
  2813.  
  2814.      sub.l     hpr_HPDT_KnobPos(a1),d3
  2815.      move.l    d3,HPROffset
  2816.  
  2817.      add.l     _GuiPos(pc),d1
  2818.      move.l    d1,_MinMouseY
  2819.      move.l    d1,_MaxMouseY
  2820.  
  2821.      addq.l    #4,d3
  2822.      move.l    d3,d1
  2823.  
  2824.      move.l    d3,_MinMouseX
  2825.  
  2826.      add.l     hpr_HPDT_MaxPos(a1),d1
  2827.      move.l    d1,_MaxMouseX
  2828.  
  2829.      move.l    #-1,_ActiveGuiObjData
  2830.      move.l    a0,_ActiveGuiObject
  2831.      bsr.s     HPRRenderKnobSelected
  2832.  
  2833.      move.l    (a7)+,_CurrentDomain
  2834.      movem.l   (a7)+,d2-7
  2835.      rts
  2836.  
  2837. .AfterKnob:
  2838.      move.l    hpr_HPDT_Visible(a1),d1
  2839.      subq.l    #1,d1
  2840.      bne.s     .AKOkIncr
  2841.      moveq     #1,d1
  2842. .AKOkIncr:
  2843.      move.l    hpr_HPDT_Position(a1),d0
  2844.      add.l     d1,d0
  2845.      bra.s     .KnobOk
  2846.  
  2847. .BeforeKnob:
  2848.      move.l    hpr_HPDT_Visible(a1),d1
  2849.      subq.l    #1,d1
  2850.      bne.s     .BKOkIncr
  2851.      moveq     #1,d1
  2852. .BKOkIncr:
  2853.      move.l    hpr_HPDT_Position(a1),d0
  2854.      sub.l     d1,d0
  2855.  
  2856. .KnobOk:
  2857.      move.l    d0,hpr_HPDT_Position(a1)
  2858.  
  2859.      bsr       HPRClearKnob
  2860.      bsr       HPRCalcKnobPos
  2861.      move.l    d0,d7
  2862.      bsr       HPRRenderKnob
  2863.  
  2864.      clr.l     _ActiveGuiObjData
  2865.      move.l    a0,_ActiveGuiObject
  2866.  
  2867.      tst.b     d7
  2868.      beq.s     .Done
  2869.  
  2870.      move.l    hpr_HPDT_Position(a1),d1
  2871.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2872.      move.l    guir_DTA_Hook(a1),d2
  2873.      beq.s     .Done
  2874.      move.l    guir_DTA_HookData(a1),d0
  2875.      move.l    d2,a1
  2876.      jsr       (a1)
  2877.  
  2878. .Done:
  2879.      move.l    (a7)+,_CurrentDomain
  2880.      movem.l   (a7)+,d2-7
  2881.      rts
  2882.  
  2883. HPRHandler:
  2884.      tst.b     d2
  2885.      bne.s     HPRTrueHandler
  2886.  
  2887.      btst      #6,$bfe001
  2888.      beq.s     .Done
  2889.      clr.l     _ActiveGuiObject
  2890. .Done:
  2891.      rts
  2892.  
  2893. HPRTrueHandler:
  2894.      move.l    _CurrentDomain(pc),-(a7)
  2895.  
  2896.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2897.      move.l    a1,_CurrentDomain
  2898.  
  2899.      LBLOCKEAI HPropClass_ID,a0,a1
  2900.  
  2901.      btst      #6,$bfe001
  2902.      bne.s     .Release
  2903.  
  2904.      sub.l     HPROffset(pc),d0
  2905.      cmp.l     hpr_HPDT_KnobPos(a1),d0
  2906.      beq.s     .Done
  2907.  
  2908.      bsr.s     HPRClearKnob
  2909.      move.l    d0,hpr_HPDT_KnobPos(a1)
  2910.      bsr.s     HPRRenderKnobSelected
  2911.  
  2912.      move.l    hpr_HPDT_KnobPos(a1),d1
  2913.      subq.l    #4,d1
  2914.      move.l    hpr_HPDT_Total(a1),d0
  2915.      sub.l     hpr_HPDT_Visible(a1),d0
  2916.      mulu      d0,d1
  2917.      move.l    hpr_HPDT_MaxPos(a1),d0
  2918.      divu      d0,d1
  2919.      ext.l     d1
  2920.      move.l    d1,hpr_HPDT_Position(a1)
  2921.  
  2922.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2923.      move.l    guir_DTA_Hook(a1),d2
  2924.      beq.s     .Done
  2925.      move.l    guir_DTA_HookData(a1),d0
  2926.      move.l    d2,a1
  2927.      jsr       (a1)
  2928.  
  2929. .Done:
  2930.      move.l    (a7)+,_CurrentDomain
  2931.      rts
  2932.  
  2933. .Release:
  2934.      clr.l     _MinMouseX
  2935.      clr.l     _MinMouseY
  2936.  
  2937.      move.l    #GuiScreenWidth,_MaxMouseX
  2938.      move.l    #256,_MaxMouseY
  2939.  
  2940.      clr.l     _ActiveGuiObject
  2941.      bsr.s     HPRClearKnob
  2942.      bsr.s     HPRRenderKnob
  2943.  
  2944.      move.l    (a7)+,_CurrentDomain
  2945.      rts
  2946.  
  2947.  
  2948. HPROffset:
  2949.      ds.l      1
  2950. ;fe
  2951. ;fs "VPropClass"
  2952. _VPropClass:
  2953.      dc.l      0
  2954.      dc.l      _GuiRootClass
  2955.      dc.l      0,0,0,0,0
  2956.      dc.l      vpr_DataSize
  2957.      dc.l      vprop_Funcs
  2958.      dc.l      vprop_data
  2959.      dc.l      0
  2960.      dc.l      vprop_Init
  2961.  
  2962. vprop_data:
  2963.      dc.l      1,10,1
  2964.  
  2965. vprop_Funcs:
  2966.      dc.l      VPRDecr
  2967.      dc.l      VPRIncr
  2968.      dc.l      0
  2969.  
  2970. vprop_Init:
  2971.      LBLOCKEAI GuiRootClass_ID,a2,a3
  2972.      add.l     a1,a3
  2973.  
  2974.      moveq     #22,d0
  2975.      move.l    d0,guir_DTA_MinWidth(a3)
  2976.      move.l    d0,guir_DTA_MaxWidth(a3)
  2977.      clr.l     guir_DTA_MaxHeight(a3)
  2978.      move.l    #19,guir_DTA_MinHeight(a3)
  2979.  
  2980.      move.l    #GCM_Layout,d0
  2981.      lea       VPRLayout,a1
  2982.      bsr       _SetMethod
  2983.      move.l    #GCM_Render,d0
  2984.      lea       VPRRender,a1
  2985.      bsr       _SetMethod
  2986.      move.l    #GCM_Click,d0
  2987.      lea       VPRClick,a1
  2988.      bsr       _SetMethod
  2989.      move.l    #GCM_Handle,d0
  2990.      lea       VPRHandler,a1
  2991.      bsr       _SetMethod
  2992.      rts
  2993.  
  2994. VPRLayout:
  2995.      movem.l   d2-5,-(a7)
  2996.  
  2997.      LBLOCKEAI GuiRootClass_ID,a0,a1
  2998.      move.l    gd_Height(a1),d0
  2999.      subq.l    #4,d0
  3000.      move.l    d0,d1
  3001.  
  3002.      LBLOCKEAI VPropClass_ID,a0,a1
  3003.      move.l    vpr_VPDT_Total(a1),d2
  3004.  
  3005.      move.l    vpr_VPDT_Visible(a1),d3
  3006.      cmp.l     d2,d3
  3007.      bcc.s     .FullKnob
  3008.  
  3009.      mulu      d3,d1
  3010.      divu      d2,d1
  3011.      ext.l     d1
  3012.  
  3013.      cmp.l     #8,d1
  3014.      bcc.s     .FullKnob
  3015.      moveq     #8,d1
  3016.  
  3017. .FullKnob:
  3018.      move.l    d1,vpr_VPDT_KnobSize(a1)
  3019.  
  3020.      sub.l     d1,d0
  3021.      move.l    d0,vpr_VPDT_MaxPos(a1)
  3022.  
  3023.      bsr.s     VPRCalcKnobPos
  3024.  
  3025.      moveq     #0,d0
  3026.      movem.l   (a7)+,d2-5
  3027.      rts
  3028.  
  3029. VPRDecr:
  3030.      movem.l   d2-7,-(a7)
  3031.      move.l    _CurrentDomain(pc),-(a7)
  3032.  
  3033.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3034.      move.l    a1,_CurrentDomain
  3035.      LBLOCKEAI VPropClass_ID,a0,a1
  3036.  
  3037.      move.l    vpr_VPDT_Position(a1),d1
  3038.      move.l    d1,d0
  3039.      subq.l    #1,d0
  3040.      move.l    d0,vpr_VPDT_Position(a1)
  3041.      bra.s     VPRUpdate
  3042.  
  3043. VPRIncr:
  3044.      movem.l   d2-7,-(a7)
  3045.      move.l    _CurrentDomain(pc),-(a7)
  3046.  
  3047.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3048.      move.l    a1,_CurrentDomain
  3049.      LBLOCKEAI VPropClass_ID,a0,a1
  3050.  
  3051.      move.l    vpr_VPDT_Position(a1),d1
  3052.      move.l    d1,d0
  3053.      addq.l    #1,d0
  3054.      move.l    d0,vpr_VPDT_Position(a1)
  3055.  
  3056. VPRUpdate:
  3057.      bsr.s     VPRClearKnob
  3058.      bsr.s     VPRCalcKnobPos
  3059.      cmp.l     d5,d1
  3060.      sne       d7
  3061.  
  3062.      bsr.s     VPRRenderKnob
  3063.  
  3064.      tst.b     d7
  3065.      beq.s     .Groumpf
  3066.      move.l    vpr_VPDT_Position(a1),d1
  3067.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3068.      move.l    guir_DTA_Hook(a1),d2
  3069.      beq.s     .Groumpf
  3070.      move.l    guir_DTA_HookData(a1),d0
  3071.      move.l    d2,a1
  3072.      jsr       (a1)
  3073.  
  3074. .Groumpf:
  3075.  
  3076.      move.l    (a7)+,_CurrentDomain
  3077.      movem.l   (a7)+,d2-7
  3078.      rts
  3079.  
  3080. VPRCalcKnobPos:
  3081.      movem.l   vpr_VPDT_Total(a1),d2-3
  3082.      move.l    vpr_VPDT_Position(a1),d5
  3083.      bpl.s     .MinOk
  3084.  
  3085.      moveq     #0,d5
  3086. .MinOk:
  3087.  
  3088.      move.l    d2,d4
  3089.      sub.l     d3,d4
  3090.      bpl.s     .Ok
  3091.      moveq     #0,d4
  3092. .Ok:
  3093.  
  3094.      cmp.l     d5,d4
  3095.      bcc.s     .MaxOk
  3096.      move.l    d4,d5
  3097. .MaxOk:
  3098.  
  3099.      move.l    d5,vpr_VPDT_Position(a1)
  3100.      move.l    d5,d0
  3101.  
  3102.      mulu      vpr_VPDT_MaxPos+2(a1),d0
  3103.      sub.l     d3,d2
  3104.      beq.s     .FullKnob
  3105.  
  3106.      divu      d2,d0
  3107.      ext.l     d0
  3108.  
  3109.      move.l    vpr_VPDT_MaxPos(a1),d2
  3110.      cmp.l     d0,d2
  3111.      bcc.s     .MaxPosOk
  3112.      move.l    d2,d0
  3113. .MaxPosOk:
  3114.  
  3115.      addq.l    #2,d0
  3116.      move.l    d0,vpr_VPDT_KnobPos(a1)
  3117.      rts
  3118.  
  3119. .FullKnob:
  3120.      moveq     #2,d0
  3121.      move.l    d0,vpr_VPDT_KnobPos(a1)
  3122.      rts
  3123.  
  3124. VPRRender:
  3125.      movem.l   d2-4,-(a7)
  3126.      move.l    _CurrentDomain(pc),-(a7)
  3127.  
  3128.      LBLOCKEAI VPropClass_ID,a0,a1
  3129.  
  3130.      LBLOCKEAI GuiRootClass_ID,a0,a0
  3131.      move.l    a0,_CurrentDomain
  3132.      moveq     #0,d0
  3133.      moveq     #0,d1
  3134.      movem.l   gd_Width(a0),d2-3
  3135.      sf        d4
  3136.      bsr.s     _DrawBevelBox
  3137.  
  3138.      moveq     #2,d0
  3139.      moveq     #1,d1
  3140.      movem.l   gd_Width(a0),d2-3
  3141.      subq.l    #4,d2
  3142.      subq.l    #2,d3
  3143.      st        d4
  3144.      bsr.s     _DrawBevelBox
  3145.  
  3146.      bsr.s     VPRRenderKnob
  3147.  
  3148.      move.l    (a7)+,_CurrentDomain
  3149.      movem.l   (a7)+,d2-4
  3150.      rts
  3151.  
  3152. VPRRenderKnob:
  3153.      moveq     #4,d0
  3154.      moveq     #14,d2
  3155.      movem.l   vpr_VPDT_KnobPos(a1),d1/d3
  3156.      sf        d4
  3157.      bsr.s     _DrawBevelBox
  3158.  
  3159.      moveq     #8,d0
  3160.      move.l    vpr_VPDT_KnobSize(a1),d1
  3161.      subq.l    #4,d1
  3162.      lsr.l     #1,d1
  3163.      add.l     vpr_VPDT_KnobPos(a1),d1
  3164.      bra.s     _DrawPropHole
  3165.  
  3166. VPRRenderKnobSelected:
  3167.      moveq     #4,d0
  3168.      moveq     #14,d2
  3169.      movem.l   vpr_VPDT_KnobPos(a1),d1/d3
  3170.      sf        d4
  3171.      bsr.s     _DrawBevelBox
  3172.  
  3173.      moveq     #6,d4
  3174.      moveq     #10,d6
  3175.      movem.l   vpr_VPDT_KnobPos(a1),d5/d7
  3176.      addq.l    #1,d5
  3177.      subq.l    #2,d7
  3178.      moveq     #3,d3
  3179.      bsr.s     _DrawRectangle
  3180.  
  3181.      moveq     #8,d0
  3182.      move.l    vpr_VPDT_KnobSize(a1),d1
  3183.      subq.l    #4,d1
  3184.      lsr.l     #1,d1
  3185.      add.l     vpr_VPDT_KnobPos(a1),d1
  3186.      bra.s     _DrawPropHole
  3187.  
  3188. VPRClearKnob:
  3189.      moveq     #4,d4
  3190.      moveq     #14,d6
  3191.      movem.l   vpr_VPDT_KnobPos(a1),d5/d7
  3192.      moveq     #0,d3
  3193.      bra.s     _DrawRectangle
  3194.  
  3195. VPRClick:
  3196.      movem.l   d2-7,-(a7)
  3197.      move.l    _CurrentDomain(pc),-(a7)
  3198.  
  3199.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3200.      move.l    a1,_CurrentDomain
  3201.  
  3202.      move.l    d1,d3
  3203.      sub.l     gd_Top(a1),d1
  3204.  
  3205.      LBLOCKEAI HPropClass_ID,a0,a1
  3206.  
  3207.      move.l    vpr_VPDT_KnobPos(a1),d2
  3208.      cmp.l     d2,d1
  3209.      bcs.s     .BeforeKnob
  3210.      add.l     vpr_VPDT_KnobSize(a1),d2
  3211.      cmp.l     d2,d1
  3212.      bcc.s     .AfterKnob
  3213.  
  3214.      sub.l     vpr_VPDT_KnobPos(a1),d3
  3215.      move.l    d3,VPROffset
  3216.  
  3217.      move.l    d0,_MinMouseX
  3218.      move.l    d0,_MaxMouseX
  3219.  
  3220.      add.l     _GuiPos(pc),d3
  3221.      addq.l    #2,d3
  3222.      move.l    d3,d1
  3223.  
  3224.      move.l    d3,_MinMouseY
  3225.  
  3226.      add.l     vpr_VPDT_MaxPos(a1),d1
  3227.      move.l    d1,_MaxMouseY
  3228.  
  3229.      move.l    #-1,_ActiveGuiObjData
  3230.      move.l    a0,_ActiveGuiObject
  3231.      bsr.s     VPRRenderKnobSelected
  3232.  
  3233.      move.l    (a7)+,_CurrentDomain
  3234.      movem.l   (a7)+,d2-7
  3235.      rts
  3236.  
  3237. .AfterKnob:
  3238.      move.l    vpr_VPDT_Visible(a1),d0
  3239.      subq.l    #1,d0
  3240.      bne.s     .AKOkIncr
  3241.      moveq     #1,d0
  3242. .AKOkIncr:
  3243.      move.l    vpr_VPDT_Position(a1),d1
  3244.      add.l     d1,d0
  3245.      bra.s     .KnobOk
  3246.  
  3247. .BeforeKnob:
  3248.      move.l    vpr_VPDT_Visible(a1),d0
  3249.      subq.l    #1,d0
  3250.      bne.s     .BKOkIncr
  3251.      moveq     #1,d0
  3252. .BKOkIncr:
  3253.      move.l    vpr_VPDT_Position(a1),d1
  3254.      sub.l     d0,d1
  3255.      exg       d0,d1
  3256.  
  3257. .KnobOk:
  3258.      move.l    d0,vpr_VPDT_Position(a1)
  3259.  
  3260.      bsr       VPRClearKnob
  3261.      bsr       VPRCalcKnobPos
  3262.      cmp.l     d5,d1
  3263.      sne       d7
  3264.  
  3265.      bsr       VPRRenderKnob
  3266.  
  3267.      clr.l     _ActiveGuiObjData
  3268.      move.l    a0,_ActiveGuiObject
  3269.  
  3270.      tst.b     d7
  3271.      beq.s     .Done
  3272.  
  3273.      move.l    vpr_VPDT_Position(a1),d1
  3274.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3275.      move.l    guir_DTA_Hook(a1),d2
  3276.      beq.s     .Done
  3277.      move.l    guir_DTA_HookData(a1),d0
  3278.      move.l    d2,a1
  3279.      jsr       (a1)
  3280.  
  3281. .Done:
  3282.      move.l    (a7)+,_CurrentDomain
  3283.      movem.l   (a7)+,d2-7
  3284.      rts
  3285.  
  3286. VPRHandler:
  3287.      tst.b     d2
  3288.      bne.s     VPRTrueHandler
  3289.  
  3290.      btst      #6,$bfe001
  3291.      beq.s     .Done
  3292.      clr.l     _ActiveGuiObject
  3293. .Done:
  3294.      rts
  3295.  
  3296. VPRTrueHandler:
  3297.      move.l    d2,-(a7)
  3298.      move.l    _CurrentDomain(pc),-(a7)
  3299.  
  3300.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3301.      move.l    a1,_CurrentDomain
  3302.  
  3303.      LBLOCKEAI HPropClass_ID,a0,a1
  3304.  
  3305.      btst      #6,$bfe001
  3306.      bne.s     .Release
  3307.  
  3308.      sub.l     VPROffset(pc),d1
  3309.      cmp.l     vpr_VPDT_KnobPos(a1),d1
  3310.      beq.s     .Done
  3311.  
  3312.      bsr.s     VPRClearKnob
  3313.      move.l    d1,vpr_VPDT_KnobPos(a1)
  3314.      bsr.s     VPRRenderKnobSelected
  3315.  
  3316.      move.l    vpr_VPDT_KnobPos(a1),d1
  3317.      subq.l    #2,d1
  3318.      move.l    vpr_VPDT_Total(a1),d0
  3319.      sub.l     vpr_VPDT_Visible(a1),d0
  3320.      mulu      d0,d1
  3321.      move.l    vpr_VPDT_MaxPos(a1),d0
  3322.      divu      d0,d1
  3323.      ext.l     d1
  3324.      move.l    d1,vpr_VPDT_Position(a1)
  3325.  
  3326.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3327.      move.l    guir_DTA_Hook(a1),d2
  3328.      beq.s     .Done
  3329.      move.l    guir_DTA_HookData(a1),d0
  3330.      move.l    d2,a1
  3331.      jsr       (a1)
  3332.  
  3333. .Done:
  3334.      move.l    (a7)+,_CurrentDomain
  3335.      move.l    (a7)+,d2
  3336.      rts
  3337.  
  3338. .Release:
  3339.      clr.l     _MinMouseX
  3340.      clr.l     _MinMouseY
  3341.  
  3342.      move.l    #GuiScreenWidth,_MaxMouseX
  3343.      move.l    #256,_MaxMouseY
  3344.  
  3345.      clr.l     _ActiveGuiObject
  3346.      bsr.s     VPRClearKnob
  3347.      bsr.s     VPRRenderKnob
  3348.  
  3349.      move.l    (a7)+,_CurrentDomain
  3350.      move.l    (a7)+,d2
  3351.      rts
  3352.  
  3353.  
  3354. VPROffset:
  3355.      ds.l      1
  3356. ;fe
  3357. ;fs "_DrawPropHole"
  3358. _DrawPropHole:     ; d0/d1=X,Y
  3359.      ;rts
  3360.      movem.l   d0-3/a0,-(a7)
  3361.  
  3362.      move.l    _CurrentDomain(pc),a0
  3363.      add.l     gd_Left(a0),d0
  3364.      add.l     gd_Top(a0),d1
  3365.  
  3366.      move.l    _GuiBitmap(pc),a0
  3367.      mulu      #GuiLineSize,d1
  3368.      add.l     d1,a0
  3369.      move.l    d0,d1
  3370.      lsr.l     #3,d1
  3371.      add.l     d1,a0
  3372.  
  3373.      not.l     d0
  3374.      and.l     #7,d0
  3375.      addq.l    #3,d0
  3376.  
  3377. .RWait:
  3378.      tst.l     _RectCount
  3379.      bne.s     .RWait
  3380.  
  3381.      moveq     #$1c,d1
  3382.      lsl.w     d0,d1
  3383.      or.w      d1,(a0)
  3384.      lea       GuiBufferWidth(a0),a0
  3385.      not.w     d1
  3386.      and.w     d1,(a0)
  3387.      lea       GuiBufferWidth(a0),a0
  3388.  
  3389.      moveq     #$3f,d1
  3390.      lsl.w     d0,d1
  3391.      not.w     d1
  3392.  
  3393.      move.w    (a0),d3
  3394.      and.w     d1,d3
  3395.      moveq     #$38,d2
  3396.      lsl.w     d0,d2
  3397.      or.w      d2,d3
  3398.      move.w    d3,(a0)
  3399.      lea       GuiBufferWidth(a0),a0
  3400.      move.w    (a0),d3
  3401.      and.w     d1,d3
  3402.      moveq     #3,d2
  3403.      lsl.w     d0,d2
  3404.      or.w      d2,d3
  3405.      move.w    d3,(a0)
  3406.      lea       GuiBufferWidth(a0),a0
  3407.  
  3408.      move.w    (a0),d3
  3409.      and.w     d1,d3
  3410.      moveq     #$30,d2
  3411.      lsl.w     d0,d2
  3412.      or.w      d2,d3
  3413.      move.w    d3,(a0)
  3414.      lea       GuiBufferWidth(a0),a0
  3415.      move.w    (a0),d3
  3416.      and.w     d1,d3
  3417.      moveq     #7,d2
  3418.      lsl.w     d0,d2
  3419.      or.w      d2,d3
  3420.      move.w    d3,(a0)
  3421.      lea       GuiBufferWidth(a0),a0
  3422.  
  3423.      moveq     #$e,d1
  3424.      lsl.w     d0,d1
  3425.      move.w    d1,d2
  3426.      not.w     d2
  3427.      and.w     d2,(a0)
  3428.      lea       GuiBufferWidth(a0),a0
  3429.      or.w      d1,(a0)
  3430.  
  3431.      movem.l   (a7)+,d0-3/a0
  3432.      rts
  3433. ;fe
  3434. ;fs "HScrollerClass"
  3435. _HScrollerClass:
  3436.      dc.l      0
  3437.      dc.l      _GuiRootClass
  3438.      dc.l      0,0,0,0,0
  3439.      dc.l      hsc_DataSize
  3440.      dc.l      hscroller_Funcs
  3441.      dc.l      hscroller_data
  3442.      dc.l      0
  3443.      dc.l      hscroller_Init
  3444.  
  3445. hscroller_data:
  3446.      dc.l      1,10,1
  3447.      dc.l      0
  3448.  
  3449. hscroller_Funcs:
  3450.      dc.l      HSCRDecr
  3451.      dc.l      HSCRIncr
  3452.      dc.l      0
  3453.  
  3454. hscroller_Init:
  3455.      move.l    #MTD_New,d0
  3456.      lea       HSCRNew,a1
  3457.      bsr       _SetMethod
  3458.      move.l    d0,HSCRSNew
  3459.  
  3460.      move.l    #GCM_GetMinMax,d0
  3461.      lea       HSCRGetMinMax,a1
  3462.      bsr       _SetMethod
  3463.  
  3464.      move.l    #GCM_Layout,d0
  3465.      lea       HSCRLayout,a1
  3466.      bsr       _SetMethod
  3467.      move.l    d0,HSCRSLayout
  3468.  
  3469.      move.l    #GCM_Render,d0
  3470.      lea       HSCRRender,a1
  3471.      bsr       _SetMethod
  3472.      move.l    d0,HSCRSRender
  3473.  
  3474.      move.l    #GCM_Click,d0
  3475.      lea       HSCRClick,a1
  3476.      bsr       _SetMethod
  3477.      move.l    d0,HSCRSClick
  3478.      rts
  3479.  
  3480. HSCRSNew:
  3481.      ds.l      1
  3482. HSCRSLayout:
  3483.      ds.l      1
  3484. HSCRSRender:
  3485.      ds.l      1
  3486. HSCRSClick:
  3487.      ds.l      1
  3488.  
  3489. HSCRNew:
  3490.      movem.l   a2-3,-(a7)
  3491.  
  3492.      move.l    a0,a3
  3493.      move.l    HSCRSNew(pc),a1
  3494.      jsr       (a1)
  3495.  
  3496.      ;LBLOCKEAI HScrollerClass_ID,a3,a0
  3497.      move.l    a3,HSCRHDat1
  3498.      move.l    a3,HSCRHDat2
  3499.      move.l    a3,HSCRHDat3
  3500.  
  3501.      lea       HSCRTree,a0
  3502.      bsr       _CreateObjectTree
  3503.      tst.l     d0
  3504.      beq.s     .Fail
  3505.  
  3506.      move.l    d0,a2
  3507.      DOMTDI    MTD_AddMember,a3
  3508.  
  3509.      SDATALI   HSCRProp,HSDT_Prop,a3
  3510.  
  3511.      moveq     #-1,d0
  3512. .Fail:
  3513.      movem.l   (a7)+,a2-3
  3514.      rts
  3515.  
  3516. HSCRProp:
  3517.      ds.l      1
  3518.  
  3519. HSCRTree:
  3520.      dc.l      OBJ_Begin,_HGroupClass
  3521.      dc.l      HGDT_Spacing,0
  3522.  
  3523.      dc.l      OBJ_Begin,_HPropClass
  3524.      dc.l      HPDT_Position
  3525. HSCRPos:
  3526.      dc.l      1
  3527.      dc.l      HPDT_Total
  3528. HSCRTot:
  3529.      dc.l      11
  3530.      dc.l      HPDT_Visible
  3531. HSCRVis:
  3532.      dc.l      1
  3533.      dc.l      DTA_HookData
  3534. HSCRHDat1:
  3535.      dc.l      0
  3536.      dc.l      DTA_Hook,HSCRPropHook
  3537.      STOOBJ    HSCRProp
  3538.  
  3539.      dc.l      OBJ_Begin,_SmallButtonClass
  3540.      dc.l      SBDT_Char,$8e
  3541.      dc.l      SBDT_Width,18
  3542.      dc.l      BDTA_Repeat,5
  3543.      dc.l      DTA_Hook,HSCRDecrHook
  3544.      dc.l      DTA_HookData
  3545. HSCRHDat2:
  3546.      dc.l      0
  3547.      ENDOBJ
  3548.  
  3549.      dc.l      OBJ_Begin,_SmallButtonClass
  3550.      dc.l      SBDT_Char,$8d
  3551.      dc.l      SBDT_Width,18
  3552.      dc.l      BDTA_Repeat,5
  3553.      dc.l      DTA_Hook,HSCRIncrHook
  3554.      dc.l      DTA_HookData
  3555. HSCRHDat3:
  3556.      dc.l      0
  3557.      ENDOBJ
  3558.  
  3559.      ENDOBJ
  3560.  
  3561. HSCRPropHook:
  3562.      move.l    d2,-(a7)
  3563.  
  3564.      move.l    d0,a0
  3565.      LBLOCKEAI HScrollerClass_ID,a0,a1
  3566.      move.l    d1,hsc_HSDT_Position(a1)
  3567.  
  3568.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3569.      move.l    guir_DTA_Hook(a1),d2
  3570.      beq.s     .Done
  3571.      move.l    guir_DTA_HookData(a1),d0
  3572.      move.l    d2,a1
  3573.      jsr       (a1)
  3574.  
  3575. .Done:
  3576.      move.l    (a7)+,d2
  3577.      rts
  3578.  
  3579. HSCRIncrHook:
  3580.      move.l    d0,a0
  3581.      LDATALI   HSDT_Prop,a0,a0
  3582.      DOMTDJI   HPM_Incr,a0
  3583.  
  3584. HSCRDecrHook:
  3585.      move.l    d0,a0
  3586.      LDATALI   HSDT_Prop,a0,a0
  3587.      DOMTDJI   HPM_Decr,a0
  3588.  
  3589. HSCRGetMinMax:
  3590.      movem.l   d2-3/a2-3,-(a7)
  3591.  
  3592.      move.l    a0,a3
  3593.      LBLOCKEAI RootClass_ID,a0,a1
  3594.      move.l    (a1),a2
  3595.      DOMTDI    GCM_GetMinMax,a2
  3596.  
  3597.      LBLOCKEAI GuiRootClass_ID,a2,a2
  3598.      movem.l   guir_DTA_MinWidth(a2),d0-3
  3599.      LBLOCKEAI GuiRootClass_ID,a3,a3
  3600.      movem.l   d0-3,guir_DTA_MinWidth(a3)
  3601.  
  3602.      movem.l   (a7)+,d2-3/a2-3
  3603.      rts
  3604.  
  3605. HSCRLayout:
  3606.      movem.l   d2-5/a2-4,-(a7)
  3607.  
  3608.      LBLOCKEAI HScrollerClass_ID,a0,a4
  3609.      move.l    hsc_HSDT_Prop(a4),a3
  3610.      LBLOCKEAI HPropClass_ID,a2,a3
  3611.      movem.l   (a4),d0-2
  3612.      movem.l   d0-2,(a3)
  3613.  
  3614.      LBLOCKEAI GuiRootClass_ID,a0,a2
  3615.      LBLOCKEAI RootClass_ID,a0,a0
  3616.      move.l    (a0),a0
  3617.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3618.      movem.l   (a2),d0-5
  3619.      movem.l   d0-5,(a1)
  3620.  
  3621.      DOMTDI    GCM_Layout,a0
  3622.      move.l    vpr_VPDT_Position(a3),vsc_VSDT_Position(a4)
  3623.  
  3624.      moveq     #0,d0
  3625.      movem.l   (a7)+,d2-5/a2-4
  3626.      rts
  3627.  
  3628. HSCRRender:
  3629.      LBLOCKEAI RootClass_ID,a0,a0
  3630.      move.l    (a0),a0
  3631.      DOMTDJI   GCM_Render,a0
  3632.  
  3633. HSCRClick:
  3634.      LBLOCKEAI RootClass_ID,a0,a0
  3635.      move.l    (a0),a0
  3636.      DOMTDJI   GCM_Click,a0
  3637.  
  3638. HSCRIncr:
  3639.      LDATALI   HSDT_Prop,a0,a0
  3640.      DOMTDJI   HPM_Incr,a0
  3641.  
  3642. HSCRDecr:
  3643.      LDATALI   HSDT_Prop,a0,a0
  3644.      DOMTDJI   HPM_Decr,a0
  3645. ;fe
  3646. ;fs "VScrollerClass"
  3647. _VScrollerClass:
  3648.      dc.l      0
  3649.      dc.l      _GuiRootClass
  3650.      dc.l      0,0,0,0,0
  3651.      dc.l      vsc_DataSize
  3652.      dc.l      vscroller_Funcs
  3653.      dc.l      vscroller_data
  3654.      dc.l      0
  3655.      dc.l      vscroller_Init
  3656.  
  3657. vscroller_data:
  3658.      dc.l      1,10,1
  3659.      dc.l      0
  3660.  
  3661. vscroller_Funcs:
  3662.      dc.l      VSCRDecr
  3663.      dc.l      VSCRIncr
  3664.      dc.l      0
  3665.  
  3666. vscroller_Init:
  3667.      move.l    #MTD_New,d0
  3668.      lea       VSCRNew,a1
  3669.      bsr       _SetMethod
  3670.      move.l    d0,VSCRSNew
  3671.  
  3672.      move.l    #GCM_GetMinMax,d0
  3673.      lea       VSCRGetMinMax,a1
  3674.      bsr       _SetMethod
  3675.  
  3676.      move.l    #GCM_Layout,d0
  3677.      lea       VSCRLayout,a1
  3678.      bsr       _SetMethod
  3679.      move.l    d0,VSCRSLayout
  3680.  
  3681.      move.l    #GCM_Render,d0
  3682.      lea       VSCRRender,a1
  3683.      bsr       _SetMethod
  3684.      move.l    d0,VSCRSRender
  3685.  
  3686.      move.l    #GCM_Click,d0
  3687.      lea       VSCRClick,a1
  3688.      bsr       _SetMethod
  3689.      move.l    d0,VSCRSClick
  3690.      rts
  3691.  
  3692. VSCRSNew:
  3693.      ds.l      1
  3694. VSCRSLayout:
  3695.      ds.l      1
  3696. VSCRSRender:
  3697.      ds.l      1
  3698. VSCRSClick:
  3699.      ds.l      1
  3700.  
  3701. VSCRNew:
  3702.      movem.l   a2-3,-(a7)
  3703.  
  3704.      move.l    a0,a3
  3705.      move.l    VSCRSNew(pc),a1
  3706.      jsr       (a1)
  3707.  
  3708.      ;LBLOCKEAI VScrollerClass_ID,a3,a0
  3709.      move.l    a3,VSCRHDat1
  3710.      move.l    a3,VSCRHDat2
  3711.      move.l    a3,VSCRHDat3
  3712.  
  3713.      lea       VSCRTree,a0
  3714.      bsr       _CreateObjectTree
  3715.      tst.l     d0
  3716.      beq.s     .Fail
  3717.  
  3718.      move.l    d0,a2
  3719.      DOMTDI    MTD_AddMember,a3
  3720.  
  3721.      SDATALI   VSCRProp,VSDT_Prop,a3
  3722.  
  3723.      moveq     #-1,d0
  3724. .Fail:
  3725.      movem.l   (a7)+,a2-3
  3726.      rts
  3727.  
  3728. VSCRProp:
  3729.      ds.l      1
  3730.  
  3731. VSCRTree:
  3732.      dc.l      OBJ_Begin,_VGroupClass
  3733.      dc.l      VGDT_Spacing,0
  3734.  
  3735.      dc.l      OBJ_Begin,_VPropClass
  3736.      dc.l      VPDT_Position
  3737. VSCRPos:
  3738.      dc.l      1
  3739.      dc.l      VPDT_Total
  3740. VSCRTot:
  3741.      dc.l      11
  3742.      dc.l      VPDT_Visible
  3743. VSCRVis:
  3744.      dc.l      1
  3745.      dc.l      DTA_HookData
  3746. VSCRHDat1:
  3747.      dc.l      0
  3748.      dc.l      DTA_Hook,VSCRPropHook
  3749.      STOOBJ    VSCRProp
  3750.  
  3751.      dc.l      OBJ_Begin,_SmallButtonClass
  3752.      dc.l      SBDT_Char,$90
  3753.      dc.l      SBDT_Width,22
  3754.      dc.l      BDTA_Repeat,5
  3755.      dc.l      DTA_Hook,VSCRDecrHook
  3756.      dc.l      DTA_HookData
  3757. VSCRHDat2:
  3758.      dc.l      0
  3759.      ENDOBJ
  3760.  
  3761.      dc.l      OBJ_Begin,_SmallButtonClass
  3762.      dc.l      SBDT_Char,$8f
  3763.      dc.l      SBDT_Width,22
  3764.      dc.l      BDTA_Repeat,5
  3765.      dc.l      DTA_Hook,VSCRIncrHook
  3766.      dc.l      DTA_HookData
  3767. VSCRHDat3:
  3768.      dc.l      0
  3769.      ENDOBJ
  3770.  
  3771.      ENDOBJ
  3772.  
  3773. VSCRPropHook:
  3774.      move.l    d2,-(a7)
  3775.  
  3776.      move.l    d0,a0
  3777.      LBLOCKEAI VScrollerClass_ID,a0,a1
  3778.      move.l    d1,vsc_VSDT_Position(a1)
  3779.  
  3780.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3781.      move.l    guir_DTA_Hook(a1),d2
  3782.      beq.s     .Done
  3783.      move.l    guir_DTA_HookData(a1),d0
  3784.      move.l    d2,a1
  3785.      jsr       (a1)
  3786.  
  3787. .Done:
  3788.      move.l    (a7)+,d2
  3789.      rts
  3790.  
  3791. VSCRIncrHook:
  3792.      move.l    d0,a0
  3793.      LDATALI   VSDT_Prop,a0,a0
  3794.      DOMTDJI   VPM_Incr,a0
  3795.  
  3796. VSCRDecrHook:
  3797.      move.l    d0,a0
  3798.      LDATALI   VSDT_Prop,a0,a0
  3799.      DOMTDJI   VPM_Decr,a0
  3800.  
  3801. VSCRGetMinMax:
  3802.      movem.l   d2-3/a2-3,-(a7)
  3803.  
  3804.      move.l    a0,a3
  3805.      LBLOCKEAI RootClass_ID,a0,a1
  3806.      move.l    (a1),a2
  3807.      DOMTDI    GCM_GetMinMax,a2
  3808.  
  3809.      LBLOCKEAI GuiRootClass_ID,a2,a2
  3810.      movem.l   guir_DTA_MinWidth(a2),d0-3
  3811.      LBLOCKEAI GuiRootClass_ID,a3,a3
  3812.      movem.l   d0-3,guir_DTA_MinWidth(a3)
  3813.  
  3814.      movem.l   (a7)+,d2-3/a2-3
  3815.      rts
  3816.  
  3817. VSCRLayout:
  3818.      movem.l   d2-5/a2-4,-(a7)
  3819.  
  3820.      LBLOCKEAI VScrollerClass_ID,a0,a4
  3821.      move.l    vsc_VSDT_Prop(a4),a2
  3822.      LBLOCKEAI VPropClass_ID,a2,a3
  3823.      movem.l   (a4),d0-2
  3824.      movem.l   d0-2,(a3)
  3825.  
  3826.      LBLOCKEAI GuiRootClass_ID,a0,a2
  3827.      LBLOCKEAI RootClass_ID,a0,a0
  3828.      move.l    (a0),a0
  3829.      LBLOCKEAI GuiRootClass_ID,a0,a1
  3830.      movem.l   (a2),d0-5
  3831.      movem.l   d0-5,(a1)
  3832.  
  3833.      DOMTDI    GCM_Layout,a0
  3834.      move.l    vpr_VPDT_Position(a3),vsc_VSDT_Position(a4)
  3835.  
  3836.      moveq     #0,d0
  3837.      movem.l   (a7)+,d2-5/a2-4
  3838.      rts
  3839.  
  3840. VSCRRender:
  3841.      LBLOCKEAI RootClass_ID,a0,a0
  3842.      move.l    (a0),a0
  3843.      DOMTDJI   GCM_Render,a0
  3844.  
  3845. VSCRClick:
  3846.      LBLOCKEAI RootClass_ID,a0,a0
  3847.      move.l    (a0),a0
  3848.      DOMTDJI   GCM_Click,a0
  3849.  
  3850. VSCRIncr:
  3851.      LDATALI   VSDT_Prop,a0,a0
  3852.      DOMTDJI   VPM_Incr,a0
  3853.  
  3854. VSCRDecr:
  3855.      LDATALI   VSDT_Prop,a0,a0
  3856.      DOMTDJI   VPM_Decr,a0
  3857. ;fe
  3858. ;fs "ListViewClass"
  3859. _ListViewClass:
  3860.      dc.l      0
  3861.      dc.l      _GuiRootClass
  3862.      dc.l      0,0,0,0,0
  3863.      dc.l      lvi_DataSize
  3864.      dc.l      empty_Funcs
  3865.      dc.l      listview_data
  3866.      dc.l      0
  3867.      dc.l      listview_Init
  3868.  
  3869. listview_data:
  3870.      ds.b      lvi_DataSize
  3871.  
  3872. listview_Init:
  3873.      move.l    #MTD_New,d0
  3874.      lea       LVINew,a1
  3875.      bsr       _SetMethod
  3876.      move.l    d0,LVISNew
  3877.  
  3878.      move.l    #GCM_GetMinMax,d0
  3879.      lea       LVIGetMinMax,a1
  3880.      bsr       _SetMethod
  3881.  
  3882.      move.l    #GCM_Layout,d0
  3883.      lea       LVILayout,a1
  3884.      bsr       _SetMethod
  3885.  
  3886.      move.l    #GCM_Render,d0
  3887.      lea       LVIRender,a1
  3888.      bsr       _SetMethod
  3889.  
  3890.      move.l    #GCM_Click,d0
  3891.      lea       LVIClick,a1
  3892.      bsr       _SetMethod
  3893.  
  3894.      move.l    #GCM_Handle,d0
  3895.      lea       LVIHandle,a1
  3896.      bsr       _SetMethod
  3897.      rts
  3898.  
  3899. LVISNew:
  3900.      ds.l      1
  3901.  
  3902. LVINew:
  3903.      movem.l   a2-3,-(a7)
  3904.  
  3905.      move.l    a0,a3
  3906.      move.l    LVISNew(pc),a1
  3907.      jsr       (a1)
  3908.  
  3909.      lea       _VScrollerClass,a0
  3910.      sub.l     a1,a1
  3911.      bsr       _NewObject
  3912.      tst.l     d0
  3913.      beq.s     .Fail
  3914.  
  3915.      move.l    d0,a2
  3916.      DOMTDI    MTD_AddMember,a3
  3917.  
  3918.      SDATALI   a2,LVDT_Scroller,a3
  3919.  
  3920.      LBLOCKEAI GuiRootClass_ID,a2,a0
  3921.      lea       LVIHook(pc),a1
  3922.      movem.l   a1/a3,guir_DTA_Hook(a0)
  3923.  
  3924.      moveq     #-1,d0
  3925. .Fail:
  3926.      movem.l   (a7)+,a2-3
  3927.      rts
  3928.  
  3929. LVIGetMinMax:
  3930.      movem.l   a2-3,-(a7)
  3931.  
  3932.      move.l    a0,a2
  3933.  
  3934.      LDATALI   LVDT_Scroller,a2,a3
  3935.      DOMTDI    GCM_GetMinMax,a3
  3936.  
  3937.      LBLOCKEAI GuiRootClass_ID,a3,a0
  3938.      LBLOCKEAI GuiRootClass_ID,a2,a1
  3939.  
  3940.      move.l    guir_DTA_MinHeight(a0),guir_DTA_MinHeight(a1)
  3941.      moveq     #40,d0
  3942.      add.l     guir_DTA_MinWidth(a0),d0
  3943.      move.l    d0,guir_DTA_MinWidth(a1)
  3944.  
  3945.      movem.l   (a7)+,a2-3
  3946.      rts
  3947.  
  3948. LVILayout:
  3949.      movem.l   d2-7/a2-6,-(a7)
  3950.  
  3951.      LBLOCKEAI ListViewClass_ID,a0,a2
  3952.      LBLOCKEAI GuiRootClass_ID,a0,a4
  3953.  
  3954.      move.l    lvi_LVDT_List(a2),a1
  3955.      moveq     #0,d2
  3956.      move.l    (a1),a1
  3957.      move.l    lvi_LVDT_FirstVis(a2),d0
  3958.      bne.s     .NotEmpty
  3959.      move.l    a1,d0
  3960. .NotEmpty:
  3961.      move.l    d0,a3
  3962.      moveq     #0,d0
  3963.  
  3964. .CountLoop:
  3965.      move.l    (a1),d1
  3966.      beq.s     .CountDone
  3967.      cmp.l     a1,a3
  3968.      bne.s     .CountNext
  3969.      move.l    d0,d2
  3970. .CountNext:
  3971.      addq.l    #1,d0
  3972.      move.l    d1,a1
  3973.      bra.s     .CountLoop
  3974. .CountDone:
  3975.  
  3976.      move.l    d0,lvi_LVDT_Total(a2)
  3977.      beq.s     .NoList
  3978.  
  3979.      move.l    gd_Height(a4),d3
  3980.      move.l    d3,d4
  3981.      subq.l    #3,d3
  3982.      lsr.l     #3,d3
  3983.  
  3984.      moveq     #-1,d5
  3985.      cmp.l     d0,d3
  3986.      bcs.s     .ScrollerOk
  3987.      moveq     #0,d5
  3988.      move.l    d0,d3
  3989. .ScrollerOk:
  3990.      move.l    d3,lvi_LVDT_NumVis(a2)
  3991.  
  3992.      move.l    d3,d6
  3993.      lsl.l     #3,d6
  3994.      addq.l    #1,d6
  3995.      move.l    d6,lvi_LVDT_ClrTop(a2)
  3996.      neg.l     d6
  3997.      add.l     d4,d6
  3998.      subq.l    #1,d6
  3999.      move.l    d6,lvi_LVDT_ClrHeight(a2)
  4000.  
  4001.      move.l    gd_Width(a4),d6
  4002.      move.l    gd_Right(a4),d7
  4003.  
  4004.      move.l    lvi_LVDT_ShowScroller(a2),d1
  4005.      move.l    d5,lvi_LVDT_ShowScroller(a2)
  4006.      beq.s     .NoScroller
  4007.  
  4008.      not.l     d1
  4009.      move.l    d1,lvi_LVDT_ClearScroller(a2)
  4010.  
  4011.      move.l    lvi_LVDT_Scroller(a2),a5
  4012.  
  4013.      LBLOCKEAI VScrollerClass_ID,a5,a6
  4014.      move.l    d2,vsc_VSDT_Position(a6)
  4015.      move.l    d0,vsc_VSDT_Total(a6)
  4016.      move.l    d3,vsc_VSDT_Visible(a6)
  4017.      move.l    a6,d5
  4018.  
  4019.      LBLOCKEAI GuiRootClass_ID,a5,a6
  4020.      move.l    gd_Right(a4),d1
  4021.      move.l    d1,gd_Right(a6)
  4022.      move.l    guir_DTA_MinWidth(a6),d0
  4023.      move.l    d0,gd_Width(a6)
  4024.      sub.l     d0,d1
  4025.      move.l    d1,gd_Left(a6)
  4026.  
  4027.      sub.l     d0,d6
  4028.      sub.l     d0,d7
  4029.      movem.l   d6-7,lvi_LVDT_Width(a2)
  4030.  
  4031.      movem.l   gd_Top(a4),d0-1
  4032.      movem.l   d0-1,gd_Top(a6)
  4033.      move.l    gd_Height(a4),gd_Height(a6)
  4034.  
  4035.      DOMTDI    GCM_Layout,a5
  4036.  
  4037.      move.l    d5,a5
  4038.      move.l    vsc_VSDT_Position(a5),d4
  4039.      move.l    d4,lvi_LVDT_FVNum(a2)
  4040.      move.l    d4,d5
  4041.      subq.l    #1,d3
  4042.      add.l     d3,d5
  4043.      move.l    d5,lvi_LVDT_LVNum(a2)
  4044.  
  4045.      sub.l     d2,d4
  4046.      bmi.s     .Backward
  4047.      subq.l    #1,d4
  4048.      bmi.s     .FVOk
  4049.  
  4050. .FwdLoop:
  4051.      move.l    (a3),a3
  4052.      dbf       d4,.FwdLoop
  4053.      bra.s     .FVOk
  4054.  
  4055. .Backward:
  4056.      neg.l     d4
  4057.      subq.l    #1,d4
  4058.      bmi.s     .FVOk
  4059.  
  4060. .BwdLoop:
  4061.      move.l    4(a3),a3
  4062.      dbf       d4,.BwdLoop
  4063. .FVOk:
  4064.  
  4065.      move.l    a3,lvi_LVDT_FirstVis(a2)
  4066.  
  4067.      subq.l    #1,d3
  4068.      bmi.s     .LVOk
  4069. .LVLoop:
  4070.      move.l    (a3),a3
  4071.      dbf       d3,.LVLoop
  4072. .LVOk:
  4073.      move.l    a3,lvi_LVDT_LastVis(a2)
  4074.      bra.s     .AllDone
  4075.  
  4076. .NoList:
  4077.      clr.l     lvi_LVDT_ShowScroller(a2)
  4078.      clr.l     lvi_LVDT_Total(a2)
  4079.      moveq     #1,d0
  4080.      move.l    d0,lvi_LVDT_ClrTop(a2)
  4081.      move.l    gd_Height(a4),d0
  4082.      subq.l    #2,d0
  4083.      move.l    d0,lvi_LVDT_ClrHeight(a2)
  4084.  
  4085.      move.l    gd_Width(a4),d0
  4086.      move.l    gd_Right(a4),d1
  4087.      movem.l   d0-1,lvi_LVDT_Width(a2)
  4088.      bra.s     .AllDone
  4089.  
  4090. .NoScroller:
  4091.      movem.l   d6-7,lvi_LVDT_Width(a2)
  4092.      clr.l     lvi_LVDT_FVNum(a2)
  4093.      subq.l    #1,d3
  4094.      move.l    d3,lvi_LVDT_LVNum(a2)
  4095.  
  4096.      move.l    lvi_LVDT_List(a2),a1
  4097.      move.l    (a1),lvi_LVDT_FirstVis(a2)
  4098.      move.l    8(a1),lvi_LVDT_LastVis(a2)
  4099.  
  4100. .AllDone:
  4101.      moveq     #0,d0
  4102.      movem.l   (a7)+,d2-7/a2-6
  4103.      rts
  4104.  
  4105. LVIRender:
  4106.      movem.l   d2-7/a2-5,-(a7)
  4107.      move.l    _CurrentDomain(pc),-(a7)
  4108.  
  4109.      LBLOCKEAI GuiRootClass_ID,a0,a1
  4110.      move.l    a1,_CurrentDomain
  4111.      LBLOCKEAI ListViewClass_ID,a0,a2
  4112.  
  4113.      moveq     #0,d0
  4114.      moveq     #0,d1
  4115.      move.l    lvi_LVDT_Width(a2),d2
  4116.      move.l    gd_Height(a1),d3
  4117.      sf        d4
  4118.      bsr       _DrawBevelBox
  4119.  
  4120.      tst.l     lvi_LVDT_ShowScroller(a2)
  4121.      beq.s     .NoScroller
  4122.      move.l    lvi_LVDT_Scroller(a2),a3
  4123.  
  4124.      tst.l     lvi_LVDT_ClearScroller(a2)
  4125.      beq.s     .DontClrScroller
  4126.      clr.l     lvi_LVDT_ClearScroller(a2)
  4127.      DOMTDI    GCM_Clear,a3
  4128. .DontClrScroller:
  4129.      DOMTDI    GCM_Render,a3
  4130. .NoScroller:
  4131.  
  4132.      move.l    lvi_LVDT_Width(a2),d0
  4133.      subq.l    #4,d0
  4134.      move.l    d0,_TextLimit
  4135.  
  4136.  
  4137.      move.l    lvi_LVDT_NumVis(a2),d0
  4138.      beq.s     .NoList
  4139.      subq.l    #1,d0
  4140.  
  4141.      move.l    lvi_LVDT_FirstVis(a2),a3
  4142.      move.l    lvi_LVDT_Selected(a2),a4
  4143.      moveq     #1,d2
  4144.  
  4145. .Loop:
  4146.      moveq     #0,d3
  4147.  
  4148.      cmp.l     a3,a4
  4149.      bne.s     .NotSel
  4150.      moveq     #3,d3
  4151. .NotSel:
  4152.  
  4153.      moveq     #2,d4
  4154.      move.l    d2,d5
  4155.      move.l    lvi_LVDT_Width(a2),d6
  4156.      subq.l    #4,d6
  4157.      moveq     #8,d7
  4158.      bsr.s     _DrawRectangle
  4159.  
  4160.      moveq     #0,d5
  4161.      move.l    lve_Color(a3),d4
  4162.      move.l    d2,d7
  4163.      move.l    lve_String(a3),a5
  4164.      moveq     #4,d6
  4165.      bsr       _DrawText
  4166.  
  4167.      move.l    (a3),a3
  4168.      addq.l    #8,d2
  4169.      dbf       d0,.Loop
  4170.  
  4171. .NoList:
  4172.      movem.l   lvi_LVDT_ClrTop(a2),d5/d7
  4173.      moveq     #2,d4
  4174.      move.l    lvi_LVDT_Width(a2),d6
  4175.      subq.l    #4,d6
  4176.      moveq     #0,d3
  4177.      bsr.s     _DrawRectangle
  4178.  
  4179. .Done:
  4180.      clr.l     _TextLimit
  4181.      move.l    (a7)+,_CurrentDomain
  4182.      movem.l   (a7)+,d2-7/a2-5
  4183.      rts
  4184.  
  4185. LVIHook:
  4186.      movem.l   a2-3,-(a7)
  4187.  
  4188.      move.l    d0,a0
  4189.      LBLOCKEAI ListViewClass_ID,a0,a1
  4190.      move.l    lvi_LVDT_FVNum(a1),d0
  4191.      move.l    d1,lvi_LVDT_FVNum(a1)
  4192.      sub.l     d0,d1
  4193.      movem.l   lvi_LVDT_FirstVis(a1),a2-3
  4194.      add.l     d1,lvi_LVDT_LVNum(a1)
  4195.  
  4196.      tst.l     d1
  4197.      bmi.s     .Backward
  4198.  
  4199.      subq.l    #1,d1
  4200.      bmi.s     .Groumpf
  4201. .ForwardLoop:
  4202.      move.l    (a2),a2
  4203.      move.l    (a3),a3
  4204.      dbf       d1,.ForwardLoop
  4205.      bra.s     .Groumpf
  4206.  
  4207. .Backward:
  4208.      neg.l     d1
  4209.      subq.l    #1,d1
  4210.      bmi.s     .Groumpf
  4211. .BackwardLoop:
  4212.      move.l    4(a2),a2
  4213.      move.l    4(a3),a3
  4214.      dbf       d1,.BackwardLoop
  4215.  
  4216. .Groumpf:
  4217.      movem.l   a2-3,lvi_LVDT_FirstVis(a1)
  4218.      DOMTDI    GCM_Render,a0
  4219.  
  4220.      movem.l   (a7)+,a2-3
  4221.      rts
  4222.  
  4223. LVIClick:
  4224.      LBLOCKEAI ListViewClass_ID,a0,a1
  4225.      tst.l     lvi_LVDT_ShowScroller(a1)
  4226.      beq.s     .NoScroller
  4227.  
  4228.      cmp.l     lvi_LVDT_Right(a1),d0
  4229.      bcs.s     .NoScroller
  4230.  
  4231.      move.l    lvi_LVDT_Scroller(a1),a0
  4232.      DOMTDJI   GCM_Click,a0
  4233.  
  4234. .NoScroller:
  4235.      clr.l     LVICounter
  4236.      move.l    a0,_ActiveGuiObject
  4237.      rts
  4238.  
  4239. LVIHandle:
  4240.      btst      #6,$bfe001
  4241.      bne.s     .Release
  4242.  
  4243.      movem.l   d2/a2-3,-(a7)
  4244.  
  4245.      LBLOCKEAI ListViewClass_ID,a0,a2
  4246.      tst.l     lvi_LVDT_Total(a2)
  4247.      beq.s     .Done
  4248.  
  4249.      move.l    lvi_LVDT_ShowScroller(a2),d2
  4250.      move.l    lvi_LVDT_Selected(a2),d0
  4251.  
  4252.      LBLOCKEAI GuiRootClass_ID,a0,a1
  4253.      sub.l     gd_Top(a1),d1
  4254.      subq.l    #1,d1
  4255.      bmi.s     .Before
  4256.  
  4257.      lsr.l     #3,d1
  4258.      cmp.l     lvi_LVDT_NumVis(a2),d1
  4259.      bge.s     .After
  4260.  
  4261.      clr.l     LVICounter
  4262.  
  4263.      move.l    lvi_LVDT_FirstVis(a2),a3
  4264.      subq.l    #1,d1
  4265.      bmi.s     .SelOk
  4266. .SelLoop:
  4267.      move.l    (a3),a3
  4268.      dbf       d1,.SelLoop
  4269. .SelOk:
  4270.  
  4271.      cmp.l     d0,a3
  4272.      beq.s     .Done
  4273. .Refresh:
  4274.      move.l    a3,lvi_LVDT_Selected(a2)
  4275.      DOMTDI    GCM_Render,a0
  4276.      bra.s     .Done
  4277.  
  4278. .Before:
  4279.      move.l    lvi_LVDT_FirstVis(a2),d1
  4280.      cmp.l     d0,d1
  4281.      beq.s     .BefOk
  4282.      move.l    d1,a3
  4283.      bra.s     .Refresh
  4284.  
  4285. .BefOk:
  4286.      tst.l     d2
  4287.      beq.s     .Done
  4288.      sub.l     #1,LVICounter
  4289.      bpl.s     .Done
  4290.      move.l    #5,LVICounter
  4291.  
  4292.      move.l    d0,a1
  4293.      move.l    4(a1),a1
  4294.      tst.l     (a1)
  4295.      beq.s     .Done
  4296.      move.l    a1,lvi_LVDT_Selected(a2)
  4297.      move.l    lvi_LVDT_Scroller(a2),a0
  4298.      DOMTDI    VSM_Decr,a0
  4299.      bra.s     .Done
  4300.  
  4301. .After:
  4302.      move.l    lvi_LVDT_LastVis(a2),d1
  4303.      cmp.l     d0,d1
  4304.      beq.s     .AftOk
  4305.      move.l    d1,a3
  4306.      bra.s     .Refresh
  4307.  
  4308. .AftOk:
  4309.      tst.l     d2
  4310.      beq.s     .Done
  4311.      sub.l     #1,LVICounter
  4312.      bpl.s     .Done
  4313.      move.l    #5,LVICounter
  4314.  
  4315.      move.l    d0,a1
  4316.      move.l    (a1),a1
  4317.      tst.l     (a1)
  4318.      beq.s     .Done
  4319.      move.l    a1,lvi_LVDT_Selected(a2)
  4320.      move.l    lvi_LVDT_Scroller(a2),a0
  4321.      DOMTDI    VSM_Incr,a0
  4322.  
  4323. .Done:
  4324.      movem.l   (a7)+,d2/a2-3
  4325.      rts
  4326.  
  4327. .Release:
  4328.      clr.l     _ActiveGuiObject
  4329.      rts
  4330.  
  4331. LVICounter:
  4332.      ds.l      1
  4333. ;fe
  4334. ;fe
  4335.  
  4336. ;fs "Obsolete"
  4337. ;fs "_RefreshGuiEntry"
  4338. _RefreshGuiEntry:  ; a0=GuiEntry
  4339.      movem.l   d3-7/a1,-(a7)
  4340.  
  4341.      move.l    _CurrentDomain,-(a7)
  4342.  
  4343.      lea       ge_Domain(a0),a1
  4344.      move.l    a1,_CurrentDomain
  4345.  
  4346.      bsr       _ClearDomain
  4347.      bsr       _Layout
  4348.      bsr       _Render
  4349.  
  4350.      move.l    (a7)+,_CurrentDomain
  4351.  
  4352.      movem.l   (a7)+,d3-7/a1
  4353.      rts
  4354. ;fe
  4355. ;fs "_ChangeGui"
  4356. _CurrentGui:
  4357.      ds.l      1
  4358. _ChangeGui:        ; a0=GuiTable
  4359.      movem.l   d0-7/a0-6,-(a7)
  4360.  
  4361.      bsr       _ClearGui
  4362.  
  4363.      move.l    a0,d2
  4364.      beq.s     .NewStyleGui
  4365.  
  4366.      tst.l     _CurrentGui
  4367.      bne.s     .Ok
  4368.      move.l    _CurrentGuiObject(pc),d0
  4369.      beq.s     .Ok
  4370.      move.l    d0,a0
  4371.      DOMTDI    GCM_Clear,a0
  4372. .Ok:
  4373.  
  4374.      move.l    d2,a0
  4375.      move.l    #_GuiTemp,_CtGuiTemp
  4376.      move.l    #CopEnd,_GuiL1Ptr
  4377.  
  4378.      move.l    a0,_CurrentGui
  4379.  
  4380.      bsr       _GetMinMax
  4381.  
  4382.      moveq     #0,d0
  4383.      move.l    #255,d1
  4384.  
  4385.      move.l    ge_MaxHeight(a0),d2
  4386.      beq.s     .NoMax
  4387.      move.l    d1,d0
  4388.      sub.l     ge_MaxHeight(a0),d0
  4389. .NoMax:
  4390.      move.l    d0,_MinGuiPos
  4391.  
  4392.      sub.l     ge_MinHeight(a0),d1
  4393.      move.l    d1,_MaxGuiPos
  4394.  
  4395.      move.l    _GuiPos(pc),d2
  4396.  
  4397.      cmp.l     d0,d2
  4398.      bcc.s     .MinOk
  4399.      move.l    d0,d2
  4400. .MinOk:
  4401.  
  4402.      cmp.l     d2,d1
  4403.      bcc.s     .MaxOk
  4404.      move.l    d1,d2
  4405. .MaxOk:
  4406.      move.l    d2,_GuiPos
  4407.  
  4408.      bsr       _MoveGui
  4409.      bsr       _Layout
  4410.      bsr       _Render
  4411.      movem.l   (a7)+,d0-7/a0-6
  4412.      rts
  4413.  
  4414. .NewStyleGui:
  4415.      clr.l     _CurrentGui
  4416.      move.l    _CurrentGuiObject,a2
  4417.      DOMTDI    GCM_GetMinMax,a2
  4418.      DOMTDI    GCM_Layout,a2
  4419.      DOMTDI    GCM_Render,a2
  4420.      movem.l   (a7)+,d0-7/a0-6
  4421.      rts
  4422. ;fe
  4423. ;fs "_MoveGui"
  4424. _GuiPos:
  4425.      dc.l      256
  4426. _MinGuiPos:
  4427.      dc.l      0
  4428. _MaxGuiPos:
  4429.      dc.l      256
  4430. _MoveGui:
  4431.      move.l    _GuiPos(pc),d0
  4432.      move.l    d0,d1
  4433.  
  4434.      add.l     #$28,d0
  4435.      move.w    d0,GuiP
  4436.  
  4437.      move.l    _CurrentGui(pc),a0
  4438.  
  4439.      move.l    #2,ge_Domain+gd_Left(a0)
  4440.      move.l    #0,ge_Domain+gd_Top(a0)
  4441.  
  4442.      move.l    #GuiScreenWidth-2,ge_Domain+gd_Right(a0)
  4443.      move.l    #GuiScreenWidth-4,ge_Domain+gd_Width(a0)
  4444.  
  4445.      move.l    #255,d0
  4446.      sub.l     d1,d0
  4447.      move.l    d0,ge_Domain+gd_Height(a0)
  4448.      move.l    d0,ge_Domain+gd_Bottom(a0)
  4449.      rts
  4450. ;fe
  4451. ;fs "_ClearGui"
  4452. _ClearGui:
  4453.      move.l    a0,-(a7)
  4454.      move.l    _CurrentGui(pc),d0
  4455.      beq.s     .Done
  4456.      move.l    d0,a0
  4457.  
  4458.      lea       ge_Domain(a0),a0
  4459.      move.l    a0,_CurrentDomain
  4460.      bsr       _ClearDomain
  4461.  
  4462. .Done:
  4463.      move.l    (a7)+,a0
  4464.      rts
  4465. ;fe
  4466. ;fs "_GetMinMax"
  4467. _GetMinMax:        ; a0=GuiEntry
  4468.      movem.l   d0-7/a0-6,-(a7)
  4469.      move.l    (a0),a1
  4470.      move.l    (a1),a1
  4471.      jsr       (a1)
  4472.      movem.l   (a7)+,d0-7/a0-6
  4473.      rts
  4474. ;fe
  4475. ;fs "_Layout"
  4476. _Layout: ; a0=GuiEntry
  4477.      movem.l   d0-7/a0-6,-(a7)
  4478.      move.l    (a0),a1
  4479.      move.l    gc_Layout(a1),d0
  4480.      beq.s     .Done
  4481.      move.l    d0,a3
  4482.  
  4483.      lea       _CurrentDomain(pc),a1
  4484.      move.l    (a1),-(a7)
  4485.      lea       ge_Domain(a0),a2
  4486.      move.l    a2,(a1)
  4487.  
  4488.      jsr       (a3)
  4489.  
  4490.      lea       _CurrentDomain(pc),a1
  4491.      move.l    (a7)+,(a1)
  4492.  
  4493. .Done:
  4494.      movem.l   (a7)+,d0-7/a0-6
  4495.      rts
  4496. ;fe
  4497. ;fs "_Render"
  4498. _Render: ; a0=GuiEntry
  4499.      movem.l   d0-7/a0-6,-(a7)
  4500.      move.l    (a0),a1
  4501.      move.l    gc_Render(a1),d0
  4502.      beq.s     .Done
  4503.      move.l    d0,a3
  4504.  
  4505.      lea       _CurrentDomain(pc),a1
  4506.      move.l    (a1),-(a7)
  4507.      lea       ge_Domain(a0),a2
  4508.      move.l    a2,(a1)
  4509.  
  4510.      jsr       (a3)
  4511.  
  4512.      lea       _CurrentDomain(pc),a1
  4513.      move.l    (a7)+,(a1)
  4514.  
  4515. .Done:
  4516.      movem.l   (a7)+,d0-7/a0-6
  4517.      rts
  4518. ;fe
  4519. ;fs "_DoClick"
  4520. _DoClick: ; a0=GuiEntry d0/d1=X,Y
  4521.      movem.l   d0-1/d3-7/a0-6,-(a7)
  4522.      move.l    (a0),a1
  4523.      move.l    gc_Click(a1),d2
  4524.      ble.s     .Done
  4525.      move.l    d2,a3
  4526.  
  4527.      lea       _CurrentDomain(pc),a1
  4528.      move.l    (a1),-(a7)
  4529.      lea       ge_Domain(a0),a2
  4530.      move.l    a2,(a1)
  4531.  
  4532.      jsr       (a3)
  4533.  
  4534.      lea       _CurrentDomain(pc),a1
  4535.      move.l    (a7)+,(a1)
  4536.      moveq     #0,d2
  4537.  
  4538. .Done:
  4539.      movem.l   (a7)+,d0-1/d3-7/a0-6
  4540.      rts
  4541. ;fe
  4542.  
  4543. ;fs "Old style classes"
  4544. ;fs "_HGroup"
  4545. _HGroup:
  4546.      dc.l      HGGetMinMax
  4547.      dc.l      HGLayout
  4548.      dc.l      _GRender
  4549.      dc.l      _GClick
  4550.  
  4551. HGGetMinMax:
  4552.      move.l    a0,a1
  4553.      lea       ge_Size(a0),a0
  4554.      moveq     #0,d0
  4555.      moveq     #0,d1
  4556.      moveq     #0,d2
  4557.      moveq     #0,d3
  4558.      ;bset      #31,d3
  4559.      not.l     d3
  4560.      sf        d5
  4561.  
  4562. .Loop:
  4563.      bsr.s     _GetMinMax
  4564.  
  4565.      add.l     ge_MinWidth(a0),d0
  4566.      move.l    ge_MaxWidth(a0),d4
  4567.      seq       d6
  4568.      or.b      d6,d5
  4569.      add.l     d4,d2
  4570.  
  4571.      move.l    ge_MinHeight(a0),d4
  4572.      cmp.l     d4,d1
  4573.      bcc.s     .MiHOk
  4574.      move.l    d4,d1
  4575. .MiHOk:
  4576.  
  4577.      move.l    ge_MaxHeight(a0),d4
  4578.      beq.s     .MaHOk
  4579.      cmp.l     d3,d4
  4580.      bcc.s     .MaHOk
  4581.      move.l    d4,d3
  4582. .MaHOk:
  4583.  
  4584.      move.l    ge_Next(a0),a0
  4585.      tst.l     (a0)
  4586.      beq.s     .Done
  4587.  
  4588.      addq.l    #GuiHorSpacing,d0
  4589.      addq.l    #GuiHorSpacing,d2
  4590.  
  4591.      bra.s     .Loop
  4592.  
  4593. .Done:
  4594.      tst.b     d5
  4595.      beq.s     .WMaxOk
  4596.      moveq     #0,d2
  4597. .WMaxOk:
  4598.  
  4599.      tst.l     d3
  4600.      bpl.s     .HMaxOk
  4601.      moveq     #0,d3
  4602. .HMaxOk:
  4603.  
  4604.      lea       ge_Size(a0),a0
  4605.      move.l    a0,ge_Next(a1)
  4606.      movem.l   d0-3,ge_MinWidth(a1)
  4607.      rts
  4608.  
  4609. HGLayout:
  4610.      move.l    a0,a6
  4611.      lea       ge_Size(a0),a0
  4612.      move.l    a0,a5
  4613.      moveq     #0,d7
  4614.  
  4615.      move.l    _CurrentDomain(pc),a1
  4616.      move.l    gd_Height(a1),d0
  4617.      move.l    gd_Top(a1),d1
  4618.      move.l    gd_Bottom(a1),d2
  4619.  
  4620. .InitLoop:
  4621.      tst.l     (a0)
  4622.      beq.s     .ILOk
  4623.      move.l    d1,ge_Domain+gd_Top(a0)
  4624.      move.l    d2,ge_Domain+gd_Bottom(a0)
  4625.      clr.l     ge_Domain+gd_Width(a0)
  4626.      move.l    d0,ge_Domain+gd_Height(a0)
  4627.      addq.l    #1,d7
  4628.  
  4629.      move.l    ge_Next(a0),a0
  4630.      bra.s     .InitLoop
  4631.  
  4632. .ILOk:
  4633.      move.l    gd_Width(a1),d5
  4634.  
  4635.      move.l    d7,d0
  4636.      subq.l    #1,d0
  4637.      add.l     d0,d0
  4638.      sub.l     d0,d5
  4639.  
  4640. .BigLoop:
  4641.      tst.l     d7
  4642.      beq.s     .MoreOrLessBigLoop
  4643.  
  4644.      move.l    d5,d4
  4645.      divu      d7,d4
  4646.      ext.l     d4
  4647.  
  4648. .MoreOrLessBigLoop:
  4649.      move.l    a5,a0
  4650.  
  4651. .Loop:
  4652.      tst.l     ge_Domain+gd_Width(a0)
  4653.      bne.s     .Fixed
  4654.  
  4655.      move.l    ge_MinWidth(a0),d0
  4656.      cmp.l     d0,d4
  4657.      bcc.s     .MinOk
  4658.      move.l    d0,ge_Domain+gd_Width(a0)
  4659.      sub.l     d0,d5
  4660.      subq.l    #1,d7
  4661.      moveq     #0,d1
  4662.      move.l    d1,ge_Domain+gd_Left(a0)
  4663.      bra.s     .BigLoop
  4664. .MinOk:
  4665.  
  4666.      move.l    ge_MaxWidth(a0),d0
  4667.      beq.s     .Next
  4668.  
  4669.      cmp.l     d4,d0
  4670.      bcc.s     .Next
  4671.      move.l    d0,ge_Domain+gd_Width(a0)
  4672.      sub.l     d0,d5
  4673.      subq.l    #1,d7
  4674.      moveq     #1,d1
  4675.      move.l    d1,ge_Domain+gd_Left(a0)
  4676.      bra.s     .BigLoop
  4677.  
  4678. .Fixed:
  4679.      move.l    ge_Domain+gd_Left(a0),d0
  4680.      eor.l     d1,d0
  4681.      beq.s     .Next
  4682.  
  4683.      move.l    ge_Domain+gd_Width(a0),d0
  4684.      add.l     d5,d0
  4685.      move.l    d7,d2
  4686.      addq.l    #1,d2
  4687.      divu      d2,d0
  4688.      ext.l     d0
  4689.  
  4690.      move.l    ge_MinWidth(a0),d2
  4691.      cmp.l     d2,d0
  4692.      bcs.s     .Next
  4693.  
  4694.      move.l    ge_MaxWidth(a0),d2
  4695.      beq.s     .AhhRâaah
  4696.      cmp.l     d0,d2
  4697.      bcs.s     .Next
  4698.  
  4699. .AhhRâaah:
  4700.      add.l     ge_Domain+gd_Width(a0),d5
  4701.      clr.l     ge_Domain+gd_Width(a0)
  4702.      addq.l    #1,d7
  4703.      move.l    d0,d4
  4704.      bra.s     .MoreOrLessBigLoop
  4705.  
  4706. .Next:
  4707.      move.l    ge_Next(a0),a0
  4708.      tst.l     (a0)
  4709.      bne.s     .Loop
  4710.  
  4711. .Ok:
  4712.  
  4713.      move.l    a5,a0
  4714.      move.l    gd_Left(a1),d0
  4715.  
  4716. .PosLoop:
  4717.      move.l    d0,ge_Domain+gd_Left(a0)
  4718.  
  4719.      move.l    ge_Domain+gd_Width(a0),d1
  4720.      bne.s     .PLWOk
  4721.      move.l    d4,d1
  4722.      move.l    d4,ge_Domain+gd_Width(a0)
  4723. .PLWOk:
  4724.  
  4725.      add.l     d1,d0
  4726.      move.l    d0,ge_Domain+gd_Right(a0)
  4727.      addq.l    #GuiHorSpacing,d0
  4728.  
  4729.      bsr       _Layout
  4730.  
  4731.      move.l    ge_Next(a0),a0
  4732.      tst.l     (a0)
  4733.      bne.s     .PosLoop
  4734.  
  4735.      rts
  4736. ;fe
  4737. ;fs "_VGroup"
  4738. _VGroup:
  4739.      dc.l      VGGetMinMax
  4740.      dc.l      VGLayout
  4741.      dc.l      _GRender
  4742.      dc.l      _GClick
  4743.  
  4744. VGGetMinMax:
  4745.      move.l    a0,a1
  4746.      lea       ge_Size(a0),a0
  4747.      moveq     #0,d0
  4748.      moveq     #0,d1
  4749.      moveq     #0,d2
  4750.      ;bset      #31,d2
  4751.      not.l     d2
  4752.      moveq     #0,d3
  4753.      sf        d5
  4754.  
  4755. .Loop:
  4756.      bsr.s     _GetMinMax
  4757.  
  4758.      add.l     ge_MinHeight(a0),d1
  4759.      move.l    ge_MaxHeight(a0),d4
  4760.      seq       d6
  4761.      or.b      d6,d5
  4762.      add.l     d4,d3
  4763.  
  4764.      move.l    ge_MinWidth(a0),d4
  4765.      cmp.l     d4,d0
  4766.      bcc.s     .MiWOk
  4767.      move.l    d4,d0
  4768. .MiWOk:
  4769.  
  4770.      move.l    ge_MaxWidth(a0),d4
  4771.      beq.s     .MaWOk
  4772.      cmp.l     d2,d4
  4773.      bcc.s     .MaWOk
  4774.      move.l    d4,d2
  4775. .MaWOk:
  4776.  
  4777.      move.l    ge_Next(a0),a0
  4778.      tst.l     (a0)
  4779.      beq.s     .Done
  4780.  
  4781.      addq.l    #GuiVerSpacing,d1
  4782.      addq.l    #GuiVerSpacing,d3
  4783.  
  4784.      bra.s     .Loop
  4785.  
  4786. .Done:
  4787.      tst.b     d5
  4788.      beq.s     .HMaxOk
  4789.      moveq     #0,d3
  4790. .HMaxOk:
  4791.  
  4792.      tst.l     d2
  4793.      bpl.s     .WMaxOk
  4794.      moveq     #0,d2
  4795. .WMaxOk:
  4796.  
  4797.      lea       ge_Size(a0),a0
  4798.      move.l    a0,ge_Next(a1)
  4799.      movem.l   d0-3,ge_MinWidth(a1)
  4800.      rts
  4801.  
  4802. VGLayout:
  4803.      move.l    a0,a6
  4804.      lea       ge_Size(a0),a0
  4805.      move.l    a0,a5
  4806.      moveq     #0,d7
  4807.  
  4808.      move.l    _CurrentDomain(pc),a1
  4809.      move.l    gd_Width(a1),d0
  4810.      move.l    gd_Left(a1),d1
  4811.      move.l    gd_Right(a1),d2
  4812.  
  4813. .InitLoop:
  4814.      tst.l     (a0)
  4815.      beq.s     .ILOk
  4816.      move.l    d1,ge_Domain+gd_Left(a0)
  4817.      move.l    d2,ge_Domain+gd_Right(a0)
  4818.      move.l    d0,ge_Domain+gd_Width(a0)
  4819.      clr.l     ge_Domain+gd_Height(a0)
  4820.      addq.l    #1,d7
  4821.  
  4822.      move.l    ge_Next(a0),a0
  4823.      bra.s     .InitLoop
  4824.  
  4825. .ILOk:
  4826.      move.l    gd_Height(a1),d5
  4827.  
  4828.      move.l    d7,d0
  4829.      subq.l    #1,d0
  4830.      sub.l     d0,d5
  4831.  
  4832. .BigLoop:
  4833.      tst.l     d7
  4834.      beq.s     .MoreOrLessBigLoop
  4835.  
  4836.      move.l    d5,d4
  4837.      divu      d7,d4
  4838.      ext.l     d4
  4839.  
  4840. .MoreOrLessBigLoop:
  4841.      move.l    a5,a0
  4842.  
  4843. .Loop:
  4844.      tst.l     ge_Domain+gd_Height(a0)
  4845.      bne.s     .Fixed
  4846.  
  4847.      move.l    ge_MinHeight(a0),d0
  4848.      cmp.l     d0,d4
  4849.      bcc.s     .MinOk
  4850.      move.l    d0,ge_Domain+gd_Height(a0)
  4851.      sub.l     d0,d5
  4852.      subq.l    #1,d7
  4853.      moveq     #0,d1
  4854.      move.l    d1,ge_Domain+gd_Top(a0)
  4855.      bra.s     .BigLoop
  4856. .MinOk:
  4857.  
  4858.      move.l    ge_MaxHeight(a0),d0
  4859.      beq.s     .Next
  4860.  
  4861.      cmp.l     d4,d0
  4862.      bcc.s     .Next
  4863.      move.l    d0,ge_Domain+gd_Height(a0)
  4864.      sub.l     d0,d5
  4865.      subq.l    #1,d7
  4866.      moveq     #1,d1
  4867.      move.l    d1,ge_Domain+gd_Top(a0)
  4868.      bra.s     .BigLoop
  4869.  
  4870. .Fixed:
  4871.      move.l    ge_Domain+gd_Top(a0),d0
  4872.      eor.l     d1,d0
  4873.      beq.s     .Next
  4874.  
  4875.      move.l    ge_Domain+gd_Height(a0),d0
  4876.      add.l     d5,d0
  4877.      move.l    d7,d2
  4878.      addq.l    #1,d2
  4879.      divu      d2,d0
  4880.      ext.l     d0
  4881.  
  4882.      move.l    ge_MinHeight(a0),d2
  4883.      cmp.l     d2,d0
  4884.      bcs.s     .Next
  4885.  
  4886.      move.l    ge_MaxHeight(a0),d2
  4887.      beq.s     .AhhRâaah
  4888.      cmp.l     d0,d2
  4889.      bcs.s     .Next
  4890.  
  4891. .AhhRâaah:
  4892.      add.l     ge_Domain+gd_Height(a0),d5
  4893.      clr.l     ge_Domain+gd_Height(a0)
  4894.      addq.l    #1,d7
  4895.      move.l    d0,d4
  4896.      bra.s     .MoreOrLessBigLoop
  4897.  
  4898. .Next:
  4899.      move.l    ge_Next(a0),a0
  4900.      tst.l     (a0)
  4901.      bne.s     .Loop
  4902.  
  4903. .Ok:
  4904.  
  4905.      move.l    a5,a0
  4906.      move.l    gd_Top(a1),d0
  4907.  
  4908. .PosLoop:
  4909.      move.l    d0,ge_Domain+gd_Top(a0)
  4910.  
  4911.      move.l    ge_Domain+gd_Height(a0),d1
  4912.      bne.s     .PLHOk
  4913.      move.l    d4,d1
  4914.      move.l    d4,ge_Domain+gd_Height(a0)
  4915. .PLHOk:
  4916.  
  4917.      add.l     d1,d0
  4918.      move.l    d0,ge_Domain+gd_Bottom(a0)
  4919.      addq.l    #GuiVerSpacing,d0
  4920.  
  4921.      bsr       _Layout
  4922.  
  4923.      move.l    ge_Next(a0),a0
  4924.      tst.l     (a0)
  4925.      bne.s     .PosLoop
  4926.  
  4927.      rts
  4928. ;fe
  4929. ;fs "_GRender"
  4930. _GRender:
  4931.      lea       ge_Size(a0),a0
  4932.  
  4933. .Loop:
  4934.      bsr       _Render
  4935.  
  4936.      move.l    ge_Next(a0),a0
  4937.      tst.l     (a0)
  4938.      bne.s     .Loop
  4939.  
  4940.      rts
  4941. ;fe
  4942. ;fs "_GClick"
  4943. _GClick:
  4944.      lea       ge_Size(a0),a0
  4945.  
  4946. .Loop:
  4947.      cmp2.l    ge_Domain+gd_Left(a0),d0
  4948.      bcs.s     .NoClick
  4949.  
  4950.      cmp2.l    ge_Domain+gd_Top(a0),d1
  4951.      bcc.s     .Bingo
  4952.  
  4953. .NoClick:
  4954.      move.l    ge_Next(a0),a0
  4955.      tst.l     (a0)
  4956.      bne.s     .Loop
  4957.      rts
  4958.  
  4959. .Bingo:
  4960.      bsr.s     _DoClick
  4961.      tst.l     d2
  4962.      bmi.s     .NoClick
  4963.      rts
  4964. ;fe
  4965. ;fs "_Button"
  4966. _Button:
  4967.      dc.l      BGetMinMax
  4968.      dc.l      0
  4969.      dc.l      BRender
  4970.      dc.l      BClick
  4971.  
  4972. BGetMinMax:
  4973.      move.l    ge_Data(a0),a1
  4974.      move.l    a1,a2
  4975. .StrLen:
  4976.      tst.b     (a1)+
  4977.      bne.s     .StrLen
  4978.      sub.l     a2,a1
  4979.      move.l    a1,d0
  4980.  
  4981.      clr.l     ge_MaxWidth(a0)
  4982.      lsl.l     #3,d0
  4983.      move.l    d0,ge_MinWidth(a0)
  4984.  
  4985.      subq.l    #8,d0
  4986.      move.l    d0,ge_Temp(a0)
  4987.  
  4988.      moveq     #12,d0
  4989.      move.l    d0,ge_MinHeight(a0)
  4990.      move.l    d0,ge_MaxHeight(a0)
  4991.  
  4992.      lea       ge_Size(a0),a1
  4993.      move.l    a1,ge_Next(a0)
  4994.      rts
  4995.  
  4996. BRender:
  4997.      move.l    _CurrentDomain(pc),a1
  4998.      moveq     #0,d0
  4999.      moveq     #0,d1
  5000.      move.l    gd_Width(a1),d2
  5001.      move.l    gd_Height(a1),d3
  5002.      sf        d4
  5003.      bsr       _DrawBevelBox
  5004.  
  5005.      sub.l     ge_Temp(a0),d2
  5006.      lsr.l     #1,d2
  5007.      move.l    d2,d6
  5008.      moveq     #2,d7
  5009.      move.l    ge_Data(a0),a5
  5010.      moveq     #1,d4
  5011.      moveq     #0,d5
  5012.      bsr       _DrawText
  5013.      rts
  5014.  
  5015. BClick:
  5016.      move.l    a0,_ActiveGuiEntry
  5017.      lea       BHandler(pc),a1
  5018.      move.l    a1,_ActiveThingHandler
  5019.  
  5020.      sf        BPressed
  5021.  
  5022. BHandler:
  5023.      btst      #6,$bfe001
  5024.      bne.s     .Desactivate
  5025.  
  5026.      move.b    BPressed(pc),d2
  5027.  
  5028.      cmp2.l    ge_Domain+gd_Left(a0),d0
  5029.      scc       d0
  5030.  
  5031.      cmp2.l    ge_Domain+gd_Top(a0),d1
  5032.      scc       d1
  5033.  
  5034.      and.b     d1,d0
  5035.      move.b    d0,BPressed
  5036.  
  5037.      eor.b     d0,d2
  5038.      beq.s     .Done
  5039.  
  5040.      tst.b     d0
  5041.      bne.s     .Press
  5042.  
  5043. .Release:
  5044.      move.l    _CurrentDomain(pc),a1
  5045.      moveq     #0,d3
  5046.      moveq     #2,d4
  5047.      moveq     #1,d5
  5048.      movem.l   gd_Width(a1),d6-7
  5049.      subq.l    #4,d6
  5050.      subq.l    #2,d7
  5051.      bsr       _DrawRectangle
  5052.  
  5053.      bra       BRender
  5054.  
  5055. .Press:
  5056.      move.l    _CurrentDomain(pc),a1
  5057.      moveq     #3,d3
  5058.      moveq     #2,d4
  5059.      moveq     #1,d5
  5060.      movem.l   gd_Width(a1),d6-7
  5061.      subq.l    #4,d6
  5062.      subq.l    #2,d7
  5063.      bsr       _DrawRectangle
  5064.  
  5065.      move.l    _CurrentDomain(pc),a1
  5066.      moveq     #0,d0
  5067.      moveq     #0,d1
  5068.      move.l    gd_Width(a1),d2
  5069.      move.l    gd_Height(a1),d3
  5070.      st        d4
  5071.      bsr       _DrawBevelBox
  5072.  
  5073.      sub.l     ge_Temp(a0),d2
  5074.      lsr.l     #1,d2
  5075.      move.l    d2,d6
  5076.      moveq     #2,d7
  5077.      move.l    ge_Data(a0),a5
  5078.      moveq     #1,d4
  5079.      moveq     #0,d5
  5080.      bsr       _DrawText
  5081.      rts
  5082.  
  5083. .Desactivate:
  5084.      clr.l     _ActiveThingHandler
  5085.  
  5086.      tst.b     BPressed
  5087.      beq.s     .Done
  5088.  
  5089.      bsr.s     .Release
  5090.      move.l    ge_Hook(a0),d0
  5091.      beq.s     .Done
  5092.      move.l    d0,a1
  5093.      jmp       (a1)
  5094.  
  5095. .Done:
  5096.      rts
  5097.  
  5098. BPressed:
  5099.      ds.b      1
  5100.      even
  5101. ;fe
  5102. ;fs "_SmallButton"
  5103. _SmallButton:
  5104.      dc.l      SBGetMinMax
  5105.      dc.l      SBLayout
  5106.      dc.l      SBRender
  5107.      dc.l      SBClick
  5108.  
  5109. SBGetMinMax:
  5110.      moveq     #16,d0
  5111.      move.l    d0,ge_MinWidth(a0)
  5112.  
  5113.      tst.l     ge_Data3(a0)
  5114.      beq.s     .Ok
  5115.      moveq     #0,d0
  5116. .Ok:
  5117.  
  5118.      move.l    d0,ge_MaxWidth(a0)
  5119.  
  5120.      moveq     #12,d0
  5121.      move.l    d0,ge_MinHeight(a0)
  5122.      move.l    d0,ge_MaxHeight(a0)
  5123.  
  5124.      lea       ge_Size(a0),a1
  5125.      move.l    a1,ge_Next(a0)
  5126.      rts
  5127.  
  5128. SBLayout:
  5129.      move.l    ge_Domain+gd_Width(a0),d0
  5130.      subq.l    #8,d0
  5131.      lsr.l     #1,d0
  5132.      move.l    d0,ge_Temp(a0)
  5133.      rts
  5134.  
  5135. SBRender:
  5136.      move.l    _CurrentDomain(pc),a1
  5137.      moveq     #0,d0
  5138.      moveq     #0,d1
  5139.      move.l    gd_Width(a1),d2
  5140.      move.l    gd_Height(a1),d3
  5141.      sf        d4
  5142.      bsr       _DrawBevelBox
  5143.  
  5144.      move.l    ge_Temp(a0),d6
  5145.      moveq     #2,d7
  5146.      move.l    ge_Data(a0),d5
  5147.      moveq     #1,d4
  5148.      bsr       _DrawChar
  5149.      rts
  5150.  
  5151. SBClick:
  5152.      move.l    a0,_ActiveGuiEntry
  5153.      lea       SBHandler(pc),a1
  5154.      move.l    a1,_ActiveThingHandler
  5155.  
  5156.      sf        SBPressed
  5157.  
  5158. SBHandler:
  5159.      btst      #6,$bfe001
  5160.      bne.s     .Desactivate
  5161.  
  5162.      move.b    SBPressed(pc),d2
  5163.      beq.s     .Glonk
  5164.      move.l    ge_Data2(a0),d3
  5165.      beq.s     .Glonk
  5166.      move.l    d3,a1
  5167.      movem.l   d0-2/a0,-(a7)
  5168.      jsr       (a1)
  5169.      movem.l   (a7)+,d0-2/a0
  5170. .Glonk:
  5171.  
  5172.      cmp2.l    ge_Domain+gd_Left(a0),d0
  5173.      scc       d0
  5174.  
  5175.      cmp2.l    ge_Domain+gd_Top(a0),d1
  5176.      scc       d1
  5177.  
  5178.      and.b     d1,d0
  5179.      move.b    d0,SBPressed
  5180.  
  5181.      eor.b     d0,d2
  5182.      beq.s     .Done
  5183.  
  5184.      tst.b     d0
  5185.      bne.s     .Press
  5186.  
  5187. .Release:
  5188.      move.l    _CurrentDomain(pc),a1
  5189.      moveq     #0,d3
  5190.      moveq     #2,d4
  5191.      moveq     #1,d5
  5192.      movem.l   gd_Width(a1),d6-7
  5193.      subq.l    #4,d6
  5194.      subq.l    #2,d7
  5195.      bsr       _DrawRectangle
  5196.  
  5197.      bra       SBRender
  5198.  
  5199. .Press:
  5200.      move.l    _CurrentDomain(pc),a1
  5201.      moveq     #3,d3
  5202.      moveq     #2,d4
  5203.      moveq     #1,d5
  5204.      movem.l   gd_Width(a1),d6-7
  5205.      subq.l    #4,d6
  5206.      subq.l    #2,d7
  5207.      bsr       _DrawRectangle
  5208.  
  5209.      move.l    _CurrentDomain(pc),a1
  5210.      moveq     #0,d0
  5211.      moveq     #0,d1
  5212.      move.l    gd_Width(a1),d2
  5213.      move.l    gd_Height(a1),d3
  5214.      st        d4
  5215.      bsr       _DrawBevelBox
  5216.  
  5217.      move.l    ge_Temp(a0),d6
  5218.      moveq     #2,d7
  5219.      move.l    ge_Data(a0),d5
  5220.      moveq     #1,d4
  5221.      bsr       _DrawChar
  5222.      rts
  5223.  
  5224. .Desactivate:
  5225.      clr.l     _ActiveThingHandler
  5226.  
  5227.      tst.b     SBPressed
  5228.      beq.s     .Done
  5229.  
  5230.      bsr.s     .Release
  5231.      move.l    ge_Hook(a0),d0
  5232.      beq.s     .Done
  5233.      move.l    d0,a1
  5234.      jmp       (a1)
  5235.  
  5236. .Done:
  5237.      rts
  5238.  
  5239. SBPressed:
  5240.      ds.b      1
  5241.      even
  5242. ;fe
  5243. ;fs "_DragBar"
  5244. _DragBar:
  5245.      dc.l      BGetMinMax
  5246.      dc.l      0
  5247.      dc.l      BRender
  5248.      dc.l      DBClick
  5249.  
  5250. DBClick:
  5251.      move.l    d0,_MinMouseX
  5252.      move.l    d0,_MaxMouseX
  5253.  
  5254.      move.l    a0,_ActiveGuiEntry
  5255.      lea       DBHandler(pc),a1
  5256.      move.l    a1,_ActiveThingHandler
  5257.  
  5258.      move.l    d1,DBOffset
  5259.      move.w    GuiSelP,d0
  5260.      sub.w     GuiP,d0
  5261.      move.w    d0,DBSelOffset
  5262.  
  5263.      move.l    d1,d0
  5264.      add.l     _MinGuiPos(pc),d0
  5265.      move.l    d0,_MinMouseY
  5266.  
  5267.      add.l     _MaxGuiPos(pc),d1
  5268.      move.l    d1,_MaxMouseY
  5269.  
  5270.      lea       DBMouseHook(pc),a0
  5271.      move.l    a0,_MouseHook
  5272.  
  5273.      ;move.l    #CopEnd,_GuiL1Ptr
  5274.      rts
  5275.  
  5276. DBHandler:
  5277.      btst      #6,$bfe001
  5278.      beq.s     .Ok
  5279.  
  5280.      clr.l     _MouseHook
  5281.      clr.l     _ActiveThingHandler
  5282.  
  5283.      clr.l     _MinMouseX
  5284.      clr.l     _MinMouseY
  5285.  
  5286.      move.l    #GuiScreenWidth,_MaxMouseX
  5287.      move.l    #256,_MaxMouseY
  5288.  
  5289.      bsr       _ClearGui
  5290.      bsr       _MoveGui
  5291.      move.l    _CurrentGui(pc),a0
  5292.      bsr       _Layout
  5293.      bsr       _Render
  5294.  
  5295. .Ok:
  5296.      rts
  5297.  
  5298. DBMouseHook:
  5299.      move.l    _MouseY(pc),d0
  5300.      sub.l     DBOffset(pc),d0
  5301.      move.l    d0,_GuiPos
  5302.  
  5303.      add.l     #$28,d0
  5304.      move.w    d0,GuiP
  5305.  
  5306.      add.w     DBSelOffset,d0
  5307.      move.w    d0,GuiSelP
  5308.      rts
  5309.  
  5310. DBOffset:
  5311.      ds.l      1
  5312. DBSelOffset:
  5313.      ds.w      1
  5314. ;fe
  5315. ;fs "_Text"
  5316. _Text:
  5317.      dc.l      TGetMinMax
  5318.      dc.l      0
  5319.      dc.l      TRender
  5320.      dc.l      0
  5321.  
  5322. TGetMinMax:
  5323.      move.l    ge_Data(a0),a1
  5324.      move.l    ge_Data2(a0),d0
  5325.      beq.s     .TrucEtTout
  5326.  
  5327.      move.l    a0,-(a7)
  5328.      move.l    (AbsExecBase).w,a6
  5329.      move.l    a1,a0
  5330.      move.l    d0,a1
  5331.      lea       TPutChar(pc),a2
  5332.      lea       _StrBuf,a3
  5333.      CALL      RawDoFmt
  5334.      move.l    (a7)+,a0
  5335.      lea       _StrBuf,a1
  5336.      lea       CustomBase,a6
  5337.  
  5338.      moveq     #0,d0
  5339.  
  5340. .TrucEtTout:
  5341.      moveq     #0,d1
  5342.  
  5343. .LLoop:
  5344.      addq.l    #1,d0
  5345.      move.l    a1,a2
  5346.  
  5347. .CLoop:
  5348.      move.b    (a2)+,d2
  5349.      beq.s     .CLDone
  5350.      cmp.b     #$a,d2
  5351.      bne.s     .CLoop
  5352. .CLDone:
  5353.  
  5354.      move.l    a2,d3
  5355.      sub.l     a1,d3
  5356.  
  5357.      cmp.l     d3,d1
  5358.      bcc.s     .Baâââh
  5359.      move.l    d3,d1
  5360. .Baâââh:
  5361.  
  5362.      move.l    a2,a1
  5363.      tst.b     d2
  5364.      bne.s     .LLoop
  5365.  
  5366.      lsl.l     #3,d0
  5367.      move.l    d0,ge_MinHeight(a0)
  5368.      move.l    d0,ge_MaxHeight(a0)
  5369.  
  5370.      subq.l    #1,d1
  5371.      lsl.l     #3,d1
  5372.  
  5373.      clr.l     ge_MaxWidth(a0)
  5374.      move.l    d1,ge_MinWidth(a0)
  5375.  
  5376.      lea       ge_Size(a0),a1
  5377.      move.l    a1,ge_Next(a0)
  5378.      rts
  5379.  
  5380. TRender:
  5381.      move.l    _CurrentDomain(pc),a1
  5382.      move.l    gd_Width(a1),d1
  5383.      move.l    ge_Data(a0),a5
  5384.      moveq     #0,d7
  5385.      move.l    ge_Data2(a0),d0
  5386.      beq.s     .LLoop
  5387.  
  5388.      movem.l   d1/a1,-(a7)
  5389.      move.l    (AbsExecBase).w,a6
  5390.      move.l    a5,a0
  5391.      move.l    d0,a1
  5392.      lea       TPutChar(pc),a2
  5393.      lea       _StrBuf,a3
  5394.      CALL      RawDoFmt
  5395.      lea       _StrBuf,a5
  5396.      lea       CustomBase,a6
  5397.      movem.l   (a7)+,d1/a1
  5398.  
  5399. .LLoop:
  5400.      move.l    a5,a1
  5401.  
  5402. .CLoop:
  5403.      move.b    (a1)+,d2
  5404.      beq.s     .CLDone
  5405.      cmp.b     #$a,d2
  5406.      bne.s     .CLoop
  5407. .CLDone:
  5408.      move.l    a1,d5
  5409.      sub.l     a5,d5
  5410.      subq.l    #1,d5
  5411.      beq.s     .Poisse
  5412.  
  5413.      move.l    d5,d0
  5414.      lsl.l     #3,d0
  5415.      move.l    d1,d6
  5416.      sub.l     d0,d6
  5417.      lsr.l     #1,d6
  5418.  
  5419.      moveq     #1,d4
  5420.      bsr       _DrawText
  5421.  
  5422. .Poisse:
  5423.      move.l    a1,a5
  5424.      addq.l    #8,d7
  5425.  
  5426.      tst.b     d2
  5427.      bne.s     .LLoop
  5428.  
  5429.      rts
  5430.  
  5431. TPutChar:
  5432.      move.b    d0,(a3)+
  5433.      rts
  5434. ;fe
  5435. ;fs "_FText"
  5436. _FText:
  5437.      dc.l      FTGetMinMax
  5438.      dc.l      0
  5439.      dc.l      TRender
  5440.      dc.l      0
  5441.  
  5442. FTGetMinMax:
  5443.      bsr.s     TGetMinMax
  5444.      move.l    ge_MinWidth(a0),ge_MaxWidth(a0)
  5445.      rts
  5446. ;fe
  5447. ;fs "_HProp"
  5448. _HProp:
  5449.      dc.l      HPGetMinMax
  5450.      dc.l      HPLayout
  5451.      dc.l      HPRender
  5452.      dc.l      HPClick
  5453.  
  5454. HPGetMinMax:
  5455.      moveq     #50,d0
  5456.      move.l    d0,ge_MinWidth(a0)
  5457.      moveq     #0,d0
  5458.      move.l    d0,ge_MaxWidth(a0)
  5459.  
  5460.      moveq     #12,d0
  5461.      move.l    d0,ge_MinHeight(a0)
  5462.      move.l    d0,ge_MaxHeight(a0)
  5463.  
  5464.      lea       ge_Size(a0),a1
  5465.      move.l    a1,ge_Next(a0)
  5466.      rts
  5467.  
  5468. HPLayout:
  5469.      move.l    ge_Domain+gd_Width(a0),d0
  5470.      sub.l     #8,d0
  5471.      move.l    d0,d1
  5472.      move.l    ge_Data2(a0),d2
  5473.  
  5474.      move.l    ge_Data3(a0),d3
  5475.      cmp.l     d2,d3
  5476.      bcc.s     .FullKnob
  5477.  
  5478.      mulu      d3,d1
  5479.      divu      d2,d1
  5480.      ext.l     d1
  5481.  
  5482.      cmp.l     #14,d1
  5483.      bcc.s     .FullKnob
  5484.      moveq     #14,d1
  5485.  
  5486. .FullKnob:
  5487.      move.l    d1,ge_Temp3(a0)
  5488.  
  5489.      sub.l     d1,d0
  5490.      move.l    d0,ge_Temp(a0)
  5491.  
  5492. HPCalcKnobPos:
  5493.      movem.l   ge_Data2(a0),d1-2
  5494.      move.l    ge_Data(a0),d0
  5495.      bpl.s     .MinOk
  5496.      moveq     #0,d0
  5497. .MinOk:
  5498.  
  5499.      move.l    d1,d3
  5500.      sub.l     d2,d3
  5501.      bpl.s     .Ok
  5502.      moveq     #0,d3
  5503. .Ok:
  5504.  
  5505.      cmp.l     d0,d3
  5506.      bcc.s     .MaxOk
  5507.      move.l    d3,d0
  5508. .MaxOk:
  5509.  
  5510.      move.l    d0,ge_Data(a0)
  5511.  
  5512.      mulu      ge_Temp+2(a0),d0
  5513.      sub.l     d2,d1
  5514.      beq.s     .FullKnob
  5515.  
  5516.      divu      d1,d0
  5517.      ext.l     d0
  5518.  
  5519.      move.l    ge_Temp(a0),d1
  5520.      cmp.l     d0,d1
  5521.      bcc.s     .MaxPosOk
  5522.      move.l    d1,d0
  5523. .MaxPosOk:
  5524.  
  5525.      addq.l    #4,d0
  5526.      move.l    d0,ge_Temp2(a0)
  5527.      rts
  5528.  
  5529. .FullKnob:
  5530.      moveq     #2,d0
  5531.      move.l    d0,ge_Temp2(a0)
  5532.      rts
  5533.  
  5534. HPRender:
  5535.      moveq     #0,d0
  5536.      moveq     #0,d1
  5537.      movem.l   ge_Domain+gd_Width(a0),d2-3
  5538.      sf        d4
  5539.      bsr.s     _DrawBevelBox
  5540.  
  5541.      moveq     #2,d0
  5542.      moveq     #1,d1
  5543.      movem.l   ge_Domain+gd_Width(a0),d2-3
  5544.      subq.l    #4,d2
  5545.      subq.l    #2,d3
  5546.      st        d4
  5547.      bsr.s     _DrawBevelBox
  5548.  
  5549. HPRenderKnob:
  5550.      moveq     #2,d1
  5551.      moveq     #8,d3
  5552.      movem.l   ge_Temp2(a0),d0/d2
  5553.      sf        d4
  5554.      bsr.s     _DrawBevelBox
  5555.  
  5556.      moveq     #4,d1
  5557.      move.l    ge_Temp3(a0),d0
  5558.      subq.l    #6,d0
  5559.      lsr.l     #1,d0
  5560.      add.l     ge_Temp2(a0),d0
  5561.      bra.s     _DrawPropHole
  5562.  
  5563. HPRenderKnobSelected:
  5564.      moveq     #2,d1
  5565.      moveq     #8,d3
  5566.      movem.l   ge_Temp2(a0),d0/d2
  5567.      sf        d4
  5568.      bsr.s     _DrawBevelBox
  5569.  
  5570.      moveq     #3,d5
  5571.      moveq     #6,d7
  5572.      movem.l   ge_Temp2(a0),d4/d6
  5573.      addq.l    #2,d4
  5574.      subq.l    #4,d6
  5575.      moveq     #3,d3
  5576.      bsr.s     _DrawRectangle
  5577.  
  5578.      moveq     #4,d1
  5579.      move.l    ge_Temp3(a0),d0
  5580.      subq.l    #6,d0
  5581.      lsr.l     #1,d0
  5582.      add.l     ge_Temp2(a0),d0
  5583.      bra.s     _DrawPropHole
  5584.  
  5585. HPClearKnob:
  5586.      moveq     #2,d5
  5587.      moveq     #8,d7
  5588.      movem.l   ge_Temp2(a0),d4/d6
  5589.      moveq     #0,d3
  5590.      bra.s     _DrawRectangle
  5591.  
  5592. HPClick:
  5593.      move.l    d0,d3
  5594.      sub.l     ge_Domain+gd_Left(a0),d0
  5595.  
  5596.      move.l    ge_Temp2(a0),d2
  5597.      cmp.l     d2,d0
  5598.      bcs.s     .BeforeKnob
  5599.      add.l     ge_Temp3(a0),d2
  5600.      cmp.l     d2,d0
  5601.      bcc.s     .AfterKnob
  5602.  
  5603.      sub.l     ge_Temp2(a0),d3
  5604.      move.l    d3,HPOffset
  5605.  
  5606.      add.l     _GuiPos(pc),d1
  5607.      move.l    d1,_MinMouseY
  5608.      move.l    d1,_MaxMouseY
  5609.  
  5610.      addq.l    #4,d3
  5611.      move.l    d3,d1
  5612.  
  5613.      move.l    d3,_MinMouseX
  5614.  
  5615.      add.l     ge_Temp(a0),d1
  5616.      move.l    d1,_MaxMouseX
  5617.  
  5618.      move.l    a0,_ActiveGuiEntry
  5619.      lea       HPHandler(pc),a1
  5620.      move.l    a1,_ActiveThingHandler
  5621.      bra       HPRenderKnobSelected
  5622.  
  5623. .BeforeKnob:
  5624.      move.l    ge_Data3(a0),d1
  5625.      subq.l    #1,d1
  5626.      bne.s     .BKOkIncr
  5627.      moveq     #1,d1
  5628. .BKOkIncr:
  5629.  
  5630.      move.l    ge_Data(a0),d0
  5631.      sub.l     d1,d0
  5632.  
  5633. .KnobOk:
  5634.      move.l    d0,ge_Data(a0)
  5635.  
  5636.      bsr       HPClearKnob
  5637.  
  5638.      bsr       HPCalcKnobPos
  5639.  
  5640.      lea       HPWaitHandler(pc),a1
  5641.      move.l    a1,_ActiveThingHandler
  5642.  
  5643.      move.l    ge_Hook(a0),d0
  5644.      beq       HPRenderKnob
  5645.      move.l    d0,a1
  5646.      move.l    ge_Data(a0),d0
  5647.  
  5648.      move.l    a0,-(a7)
  5649.      jsr       (a1)
  5650.      move.l    (a7)+,a0
  5651.  
  5652.      bra       HPRenderKnob
  5653.  
  5654. .AfterKnob:
  5655.      move.l    ge_Data3(a0),d1
  5656.      subq.l    #1,d1
  5657.      bne.s     .AKOkIncr
  5658.      moveq     #1,d1
  5659. .AKOkIncr:
  5660.  
  5661.      move.l    ge_Data(a0),d0
  5662.      add.l     d1,d0
  5663.  
  5664.      bra.s     .KnobOk
  5665.  
  5666. HPWaitHandler:
  5667.      btst      #6,$bfe001
  5668.      beq.s     .Done
  5669.      clr.l     _ActiveThingHandler
  5670. .Done:
  5671.      rts
  5672.  
  5673. HPHandler:
  5674.      btst      #6,$bfe001
  5675.      bne.s     .Release
  5676.  
  5677.      sub.l     HPOffset(pc),d0
  5678.  
  5679.      cmp.l     ge_Temp2(a0),d0
  5680.      beq.s     .Done
  5681.  
  5682.      bsr.s     HPClearKnob
  5683.      move.l    d0,ge_Temp2(a0)
  5684.      bsr.s     HPRenderKnobSelected
  5685.  
  5686.      move.l    ge_Temp2(a0),d0
  5687.      subq.l    #4,d0
  5688.      move.l    ge_Data2(a0),d1
  5689.      sub.l     ge_Data3(a0),d1
  5690.      mulu      d1,d0
  5691.      move.l    ge_Temp(a0),d1
  5692.      divu      d1,d0
  5693.      ext.l     d0
  5694.  
  5695.      move.l    d0,ge_Data(a0)
  5696.  
  5697.      move.l    ge_Hook(a0),d1
  5698.      beq.s     .Done
  5699.      move.l    d1,a1
  5700.      jmp       (a1)
  5701.  
  5702. .Done:
  5703.      rts
  5704. .Release:
  5705.      clr.l     _MinMouseX
  5706.      clr.l     _MinMouseY
  5707.  
  5708.      move.l    #GuiScreenWidth,_MaxMouseX
  5709.      move.l    #256,_MaxMouseY
  5710.  
  5711.      clr.l     _ActiveThingHandler
  5712.      clr.l     _ActiveGuiEntry
  5713.      bsr.s     HPClearKnob
  5714.      bra.s     HPRenderKnob
  5715.  
  5716. HPOffset:
  5717.      ds.l      1
  5718. ;fe
  5719. ;fs "_VProp"
  5720. _VProp:
  5721.      dc.l      VPGetMinMax
  5722.      dc.l      VPLayout
  5723.      dc.l      VPRender
  5724.      dc.l      VPClick
  5725.  
  5726. VPGetMinMax:
  5727.      moveq     #19,d0
  5728.      move.l    d0,ge_MinHeight(a0)
  5729.      moveq     #0,d0
  5730.      move.l    d0,ge_MaxHeight(a0)
  5731.  
  5732.      moveq     #20,d0
  5733.      move.l    d0,ge_MinWidth(a0)
  5734.      move.l    d0,ge_MaxWidth(a0)
  5735.  
  5736.      lea       ge_Size(a0),a1
  5737.      move.l    a1,ge_Next(a0)
  5738.      rts
  5739.  
  5740. VPLayout:
  5741.      move.l    ge_Domain+gd_Height(a0),d0
  5742.      sub.l     #4,d0
  5743.      move.l    d0,d1
  5744.      move.l    ge_Data2(a0),d2
  5745.  
  5746.      move.l    ge_Data3(a0),d3
  5747.      cmp.l     d2,d3
  5748.      bcc.s     .FullKnob
  5749.  
  5750.      mulu      d3,d1
  5751.      divu      d2,d1
  5752.      ext.l     d1
  5753.  
  5754.      cmp.l     #8,d1
  5755.      bcc.s     .FullKnob
  5756.      moveq     #8,d1
  5757.  
  5758. .FullKnob:
  5759.      move.l    d1,ge_Temp3(a0)
  5760.  
  5761.      sub.l     d1,d0
  5762.      move.l    d0,ge_Temp(a0)
  5763.  
  5764. VPCalcKnobPos:
  5765.      movem.l   ge_Data2(a0),d1-2
  5766.      move.l    ge_Data(a0),d0
  5767.      bpl.s     .MinOk
  5768.      moveq     #0,d0
  5769. .MinOk:
  5770.  
  5771.      move.l    d1,d3
  5772.      sub.l     d2,d3
  5773.      bpl.s     .Ok
  5774.      moveq     #0,d3
  5775. .Ok:
  5776.  
  5777.      cmp.l     d0,d3
  5778.      bcc.s     .MaxOk
  5779.      move.l    d3,d0
  5780. .MaxOk:
  5781.  
  5782.      move.l    d0,ge_Data(a0)
  5783.  
  5784.      mulu      ge_Temp+2(a0),d0
  5785.      sub.l     d2,d1
  5786.      beq.s     .FullKnob
  5787.  
  5788.      divu      d1,d0
  5789.      ext.l     d0
  5790.  
  5791.      move.l    ge_Temp(a0),d1
  5792.      cmp.l     d0,d1
  5793.      bcc.s     .MaxPosOk
  5794.      move.l    d1,d0
  5795. .MaxPosOk:
  5796.  
  5797.      addq.l    #2,d0
  5798.      move.l    d0,ge_Temp2(a0)
  5799.      rts
  5800.  
  5801. .FullKnob:
  5802.      moveq     #2,d0
  5803.      move.l    d0,ge_Temp2(a0)
  5804.      rts
  5805.  
  5806. VPRender:
  5807.      moveq     #0,d0
  5808.      moveq     #0,d1
  5809.      movem.l   ge_Domain+gd_Width(a0),d2-3
  5810.      sf        d4
  5811.      bsr.s     _DrawBevelBox
  5812.  
  5813.      moveq     #2,d0
  5814.      moveq     #1,d1
  5815.      movem.l   ge_Domain+gd_Width(a0),d2-3
  5816.      subq.l    #4,d2
  5817.      subq.l    #2,d3
  5818.      st        d4
  5819.      bsr.s     _DrawBevelBox
  5820.  
  5821. VPRenderKnob:
  5822.      moveq     #4,d0
  5823.      move.l    #12,d2
  5824.      movem.l   ge_Temp2(a0),d1/d3
  5825.      sf        d4
  5826.      bsr.s     _DrawBevelBox
  5827.  
  5828.      moveq     #7,d0
  5829.      move.l    ge_Temp3(a0),d1
  5830.      subq.l    #4,d1
  5831.      lsr.l     #1,d1
  5832.      add.l     ge_Temp2(a0),d1
  5833.      bra.s     _DrawPropHole
  5834.  
  5835. VPRenderKnobSelected:
  5836.      moveq     #4,d0
  5837.      moveq     #12,d2
  5838.      movem.l   ge_Temp2(a0),d1/d3
  5839.      sf        d4
  5840.      bsr.s     _DrawBevelBox
  5841.  
  5842.      moveq     #6,d4
  5843.      moveq     #8,d6
  5844.      movem.l   ge_Temp2(a0),d5/d7
  5845.      addq.l    #1,d5
  5846.      subq.l    #2,d7
  5847.      moveq     #3,d3
  5848.      bsr.s     _DrawRectangle
  5849.  
  5850.      moveq     #7,d0
  5851.      move.l    ge_Temp3(a0),d1
  5852.      subq.l    #4,d1
  5853.      lsr.l     #1,d1
  5854.      add.l     ge_Temp2(a0),d1
  5855.      bra.s     _DrawPropHole
  5856.  
  5857. VPClearKnob:
  5858.      moveq     #4,d4
  5859.      moveq     #12,d6
  5860.      movem.l   ge_Temp2(a0),d5/d7
  5861.      moveq     #0,d3
  5862.      bra.s     _DrawRectangle
  5863.  
  5864. VPClick:
  5865.      move.l    d1,d3
  5866.      sub.l     ge_Domain+gd_Top(a0),d1
  5867.  
  5868.      move.l    ge_Temp2(a0),d2
  5869.      cmp.l     d2,d1
  5870.      bcs.s     .BeforeKnob
  5871.      add.l     ge_Temp3(a0),d2
  5872.      cmp.l     d2,d1
  5873.      bcc.s     .AfterKnob
  5874.  
  5875.      sub.l     ge_Temp2(a0),d3
  5876.      move.l    d3,VPOffset
  5877.  
  5878.      move.l    d0,_MinMouseX
  5879.      move.l    d0,_MaxMouseX
  5880.  
  5881.      add.l     _GuiPos(pc),d3
  5882.      addq.l    #2,d3
  5883.      move.l    d3,d1
  5884.      move.l    d3,_MinMouseY
  5885.  
  5886.      add.l     ge_Temp(a0),d1
  5887.      move.l    d1,_MaxMouseY
  5888.  
  5889.      move.l    a0,_ActiveGuiEntry
  5890.      lea       VPHandler(pc),a1
  5891.      move.l    a1,_ActiveThingHandler
  5892.      bra       VPRenderKnobSelected
  5893.  
  5894. .BeforeKnob:
  5895.      move.l    ge_Data3(a0),d1
  5896.      subq.l    #1,d1
  5897.      bne.s     .BKOkIncr
  5898.      moveq     #1,d1
  5899. .BKOkIncr:
  5900.  
  5901.      move.l    ge_Data(a0),d0
  5902.      sub.l     d1,d0
  5903.  
  5904. .KnobOk:
  5905.      move.l    d0,ge_Data(a0)
  5906.  
  5907.      bsr       VPClearKnob
  5908.  
  5909.      bsr       VPCalcKnobPos
  5910.  
  5911.      lea       VPWaitHandler(pc),a1
  5912.      move.l    a1,_ActiveThingHandler
  5913.  
  5914.      move.l    ge_Hook(a0),d0
  5915.      beq       VPRenderKnob
  5916.      move.l    d0,a1
  5917.      move.l    ge_Data(a0),d0
  5918.  
  5919.      move.l    a0,-(a7)
  5920.      jsr       (a1)
  5921.      move.l    (a7)+,a0
  5922.  
  5923.      bra       VPRenderKnob
  5924.  
  5925. .AfterKnob:
  5926.      move.l    ge_Data3(a0),d1
  5927.      subq.l    #1,d1
  5928.      bne.s     .AKOkIncr
  5929.      moveq     #1,d1
  5930. .AKOkIncr:
  5931.  
  5932.      move.l    ge_Data(a0),d0
  5933.      add.l     d1,d0
  5934.  
  5935.      bra.s     .KnobOk
  5936.  
  5937. VPWaitHandler:
  5938.      btst      #6,$bfe001
  5939.      beq.s     .Done
  5940.      clr.l     _ActiveThingHandler
  5941. .Done:
  5942.      rts
  5943.  
  5944. VPHandler:
  5945.      btst      #6,$bfe001
  5946.      bne.s     .Release
  5947.  
  5948.      sub.l     VPOffset(pc),d1
  5949.  
  5950.      cmp.l     ge_Temp2(a0),d1
  5951.      beq.s     .Done
  5952.  
  5953.      bsr.s     VPClearKnob
  5954.      move.l    d1,ge_Temp2(a0)
  5955.      bsr.s     VPRenderKnobSelected
  5956.  
  5957.      move.l    ge_Temp2(a0),d1
  5958.      subq.l    #2,d1
  5959.      move.l    ge_Data2(a0),d0
  5960.      sub.l     ge_Data3(a0),d0
  5961.      mulu      d0,d1
  5962.      move.l    ge_Temp(a0),d0
  5963.      divu      d0,d1
  5964.      ext.l     d1
  5965.      move.l    d1,ge_Data(a0)
  5966.  
  5967.      move.l    d1,d0
  5968.      move.l    ge_Hook(a0),d1
  5969.      beq.s     .Done
  5970.      move.l    d1,a1
  5971.      jmp       (a1)
  5972.  
  5973. .Done:
  5974.      rts
  5975. .Release:
  5976.      clr.l     _MinMouseX
  5977.      clr.l     _MinMouseY
  5978.  
  5979.      move.l    #GuiScreenWidth,_MaxMouseX
  5980.      move.l    #256,_MaxMouseY
  5981.  
  5982.      clr.l     _ActiveThingHandler
  5983.      clr.l     _ActiveGuiEntry
  5984.      bsr.s     VPClearKnob
  5985.      bra.s     VPRenderKnob
  5986.  
  5987. VPOffset:
  5988.      ds.l      1
  5989. ;fe
  5990. ;fs "_HScroller"
  5991. _HScroller:
  5992.      dc.l      HSCGetMinMax
  5993.      dc.l      HSCLayout
  5994.      dc.l      HSCRender
  5995.      dc.l      HSCClick
  5996.  
  5997. HSCGetMinMax:
  5998.      moveq     #0,d0
  5999.      move.l    _CtGuiTemp(pc),a1
  6000.      move.l    a1,ge_Temp(a0)
  6001.      lea       ge_Size*7(a1),a2
  6002.      move.l    a2,_CtGuiTemp
  6003.  
  6004.      move.l    #_HGroup,(a1)
  6005.      lea       ge_Size(a1),a1
  6006.  
  6007.      move.l    a1,ge_Temp2(a0)
  6008.      move.l    #_HProp,(a1)
  6009.      move.l    ge_Data(a0),ge_Data(a1)
  6010.      move.l    ge_Data2(a0),ge_Data2(a1)
  6011.      move.l    ge_Data3(a0),ge_Data3(a1)
  6012.      move.l    a0,ge_ID(a1)
  6013.      move.l    #HSCHook,ge_Hook(a1)
  6014.  
  6015.      lea       ge_Size(a1),a1
  6016.      move.l    #_HSpacingEater,(a1)
  6017.  
  6018.      lea       ge_Size(a1),a1
  6019.      move.l    #_SmallButton,(a1)
  6020.      move.l    #$8e,ge_Data(a1)
  6021.      move.l    a0,ge_ID(a1)
  6022.      move.l    #HSCRelHook,ge_Hook(a1)
  6023.      move.l    #HSCDecrHook,ge_Data2(a1)
  6024.      move.l    d0,ge_Data3(a1)
  6025.  
  6026.      lea       ge_Size(a1),a1
  6027.      move.l    #_HSpacingEater,(a1)
  6028.  
  6029.      lea       ge_Size(a1),a1
  6030.      move.l    #_SmallButton,(a1)
  6031.      move.l    #$8d,ge_Data(a1)
  6032.      move.l    a0,ge_ID(a1)
  6033.      move.l    #HSCRelHook,ge_Hook(a1)
  6034.      move.l    #HSCIncrHook,ge_Data2(a1)
  6035.      move.l    d0,ge_Data3(a1)
  6036.  
  6037.      lea       ge_Size(a1),a1
  6038.      clr.l     (a1)
  6039.  
  6040.      move.l    a0,a1
  6041.      move.l    ge_Temp(a1),a0
  6042.      bsr       _GetMinMax
  6043.  
  6044.      move.l    ge_MinWidth(a0),ge_MinWidth(a1)
  6045.      move.l    ge_MaxWidth(a0),ge_MaxWidth(a1)
  6046.      move.l    ge_MinHeight(a0),ge_MinHeight(a1)
  6047.      move.l    ge_MaxHeight(a0),ge_MaxHeight(a1)
  6048.  
  6049.      lea       ge_Size(a1),a0
  6050.      move.l    a0,ge_Next(a1)
  6051.      rts
  6052.  
  6053. HSCLayout:
  6054.      move.l    a0,a2
  6055.      move.l    ge_Temp2(a0),a3
  6056.      movem.l   ge_Data(a0),d0-2
  6057.      movem.l   d0-2,ge_Data(a3)
  6058.  
  6059.      move.l    a0,a1
  6060.      move.l    ge_Temp(a1),a0
  6061.  
  6062.      movem.l   ge_Domain(a1),d0-5
  6063.      movem.l   d0-5,ge_Domain(a0)
  6064.  
  6065.      bsr       _Layout
  6066.  
  6067.      move.l    ge_Data(a3),ge_Data(a2)
  6068.      rts
  6069.  
  6070. HSCRender:
  6071.      move.l    ge_Temp(a0),a0
  6072.      bra       _Render
  6073.  
  6074. HSCClick:
  6075.      move.l    ge_Temp(a0),a0
  6076.      bra       _DoClick
  6077.  
  6078. HSCHook:
  6079.      move.l    ge_ID(a0),a1
  6080.      movem.l   ge_Data(a0),d0-2
  6081.      movem.l   d0-2,ge_Data(a1)
  6082.  
  6083. HSCCallHook:
  6084.      move.l    ge_Hook(a1),d1
  6085.      beq.s     .Done
  6086.      move.l    a1,a0
  6087.      move.l    d1,a1
  6088.      jmp       (a1)
  6089.  
  6090. .Done:
  6091.      rts
  6092.  
  6093. HSCDecrHook:
  6094.      sub.l     #1,HSCHookCount
  6095.      bpl.s     .Done
  6096.  
  6097.      move.l    #5,HSCHookCount
  6098.      move.l    ge_ID(a0),a1
  6099.      move.l    ge_Temp2(a1),a0
  6100.      sub.l     #1,ge_Data(a0)
  6101.      bsr       _RefreshGuiEntry
  6102.  
  6103.      move.l    ge_Data(a0),d0
  6104.      move.l    d0,ge_Data(a1)
  6105.      bra.s     HSCCallHook
  6106.  
  6107. .Done:
  6108.      rts
  6109.  
  6110. HSCIncrHook:
  6111.      sub.l     #1,HSCHookCount
  6112.      bpl.s     .Done
  6113.  
  6114.      move.l    #5,HSCHookCount
  6115.      move.l    ge_ID(a0),a1
  6116.      move.l    ge_Temp2(a1),a0
  6117.      add.l     #1,ge_Data(a0)
  6118.      bsr       _RefreshGuiEntry
  6119.  
  6120.      move.l    ge_Data(a0),d0
  6121.      move.l    d0,ge_Data(a1)
  6122.      bra.s     HSCCallHook
  6123.  
  6124. .Done:
  6125.      rts
  6126.  
  6127. HSCRelHook:
  6128.      clr.l     HSCHookCount
  6129.      rts
  6130.  
  6131. HSCHookCount:
  6132.      dc.l      0
  6133. ;fe
  6134. ;fs "_VScroller"
  6135. _VScroller:
  6136.      dc.l      VSCGetMinMax
  6137.      dc.l      VSCLayout
  6138.      dc.l      VSCRender
  6139.      dc.l      VSCClick
  6140.  
  6141. VSCGetMinMax:
  6142.      moveq     #1,d0
  6143.      move.l    _CtGuiTemp(pc),a1
  6144.      move.l    a1,ge_Temp(a0)
  6145.      lea       ge_Size*7(a1),a2
  6146.      move.l    a2,_CtGuiTemp
  6147.  
  6148.      move.l    #_VGroup,(a1)
  6149.      lea       ge_Size(a1),a1
  6150.  
  6151.      move.l    a1,ge_Temp2(a0)
  6152.      move.l    #_VProp,(a1)
  6153.      move.l    ge_Data(a0),ge_Data(a1)
  6154.      move.l    ge_Data2(a0),ge_Data2(a1)
  6155.      move.l    ge_Data3(a0),ge_Data3(a1)
  6156.      move.l    a0,ge_ID(a1)
  6157.      move.l    #VSCHook,ge_Hook(a1)
  6158.      lea       ge_Size(a1),a1
  6159.  
  6160.      move.l    #_VSpacingEater,(a1)
  6161.      lea       ge_Size(a1),a1
  6162.  
  6163.      move.l    #_SmallButton,(a1)
  6164.      move.l    #$90,ge_Data(a1)
  6165.      move.l    a0,ge_ID(a1)
  6166.      move.l    #VSCRelHook,ge_Hook(a1)
  6167.      move.l    #VSCDecrHook,ge_Data2(a1)
  6168.      move.l    d0,ge_Data3(a1)
  6169.      lea       ge_Size(a1),a1
  6170.  
  6171.      move.l    #_VSpacingEater,(a1)
  6172.      lea       ge_Size(a1),a1
  6173.  
  6174.      move.l    #_SmallButton,(a1)
  6175.      move.l    #$8f,ge_Data(a1)
  6176.      move.l    a0,ge_ID(a1)
  6177.      move.l    #VSCRelHook,ge_Hook(a1)
  6178.      move.l    #VSCIncrHook,ge_Data2(a1)
  6179.      move.l    d0,ge_Data3(a1)
  6180.      lea       ge_Size(a1),a1
  6181.  
  6182.      clr.l     (a1)
  6183.  
  6184.      move.l    a0,a1
  6185.      move.l    ge_Temp(a1),a0
  6186.      bsr       _GetMinMax
  6187.  
  6188.      move.l    ge_MinWidth(a0),ge_MinWidth(a1)
  6189.      move.l    ge_MaxWidth(a0),ge_MaxWidth(a1)
  6190.      move.l    ge_MinHeight(a0),ge_MinHeight(a1)
  6191.      move.l    ge_MaxHeight(a0),ge_MaxHeight(a1)
  6192.  
  6193.      lea       ge_Size(a1),a0
  6194.      move.l    a0,ge_Next(a1)
  6195.      rts
  6196.  
  6197. VSCLayout:
  6198.      move.l    a0,a2
  6199.      move.l    ge_Temp2(a0),a3
  6200.      movem.l   ge_Data(a0),d0-2
  6201.      movem.l   d0-2,ge_Data(a3)
  6202.  
  6203.      move.l    a0,a1
  6204.      move.l    ge_Temp(a1),a0
  6205.  
  6206.      movem.l   ge_Domain(a1),d0-5
  6207.      movem.l   d0-5,ge_Domain(a0)
  6208.  
  6209.      bsr       _Layout
  6210.  
  6211.      move.l    ge_Data(a3),ge_Data(a2)
  6212.      rts
  6213.  
  6214. VSCRender:
  6215.      move.l    ge_Temp(a0),a0
  6216.      bra       _Render
  6217.  
  6218. VSCClick:
  6219.      move.l    ge_Temp(a0),a0
  6220.      bra       _DoClick
  6221.  
  6222. VSCHook:
  6223.      move.l    ge_ID(a0),a1
  6224.      movem.l   ge_Data(a0),d0-2
  6225.      movem.l   d0-2,ge_Data(a1)
  6226.  
  6227. VSCCallHook:
  6228.      move.l    ge_Hook(a1),d1
  6229.      beq.s     .Done
  6230.      move.l    a1,a0
  6231.      move.l    d1,a1
  6232.      jmp       (a1)
  6233.  
  6234. .Done:
  6235.      rts
  6236.  
  6237. VSCDecrHook:
  6238.      sub.l     #1,VSCHookCount
  6239.      bpl.s     .Done
  6240.  
  6241.      move.l    #5,VSCHookCount
  6242.      move.l    ge_ID(a0),a1
  6243.      move.l    ge_Temp2(a1),a0
  6244.      sub.l     #1,ge_Data(a0)
  6245.      bsr       _RefreshGuiEntry
  6246.  
  6247.      move.l    ge_Data(a0),d0
  6248.      move.l    d0,ge_Data(a1)
  6249.      bra.s     VSCCallHook
  6250.  
  6251. .Done:
  6252.      rts
  6253.  
  6254. VSCIncrHook:
  6255.      sub.l     #1,VSCHookCount
  6256.      bpl.s     .Done
  6257.  
  6258.      move.l    #5,VSCHookCount
  6259.      move.l    ge_ID(a0),a1
  6260.      move.l    ge_Temp2(a1),a0
  6261.      add.l     #1,ge_Data(a0)
  6262.      bsr       _RefreshGuiEntry
  6263.  
  6264.      move.l    ge_Data(a0),d0
  6265.      move.l    d0,ge_Data(a1)
  6266.      bra.s     VSCCallHook
  6267.  
  6268. .Done:
  6269.      rts
  6270.  
  6271. VSCRelHook:
  6272.      clr.l     VSCHookCount
  6273.      rts
  6274.  
  6275. VSCHookCount:
  6276.      dc.l      0
  6277. ;fe
  6278. ;fs "_ListView"
  6279. _ListView:
  6280.      dc.l      LVGetMinMax
  6281.      dc.l      LVLayout
  6282.      dc.l      LVRender
  6283.      dc.l      LVClick
  6284.  
  6285. LVGetMinMax:
  6286.      moveq     #1,d0
  6287.      move.l    _CtGuiTemp(pc),a1
  6288.      move.l    a1,ge_Temp(a0)
  6289.      lea       ge_Size*5(a1),a2
  6290.      move.l    a2,_CtGuiTemp
  6291.  
  6292.      move.l    #_HGroup,(a1)
  6293.      lea       ge_Size(a1),a1
  6294.  
  6295.      move.l    a1,ge_Temp2(a0)
  6296.      move.l    #IntListView,(a1)
  6297.      move.l    ge_Data3(a0),ge_Temp3(a1)
  6298.      move.l    a0,ge_ID(a1)
  6299.      move.l    ge_Hook(a0),ge_Hook(a1)
  6300.      lea       ge_Size(a1),a1
  6301.  
  6302.      move.l    #_HSpacingEater,(a1)
  6303.      lea       ge_Size(a1),a1
  6304.  
  6305.      move.l    a1,ge_Temp3(a0)
  6306.      move.l    #_VScroller,(a1)
  6307.      move.l    ge_Data2(a0),ge_Data(a1)
  6308.      move.l    a0,ge_ID(a1)
  6309.      move.l    #LVHook,ge_Hook(a1)
  6310.      lea       ge_Size(a1),a1
  6311.  
  6312.      clr.l     (a1)
  6313.  
  6314.      move.l    a0,a1
  6315.      move.l    ge_Temp(a1),a0
  6316.      bsr       _GetMinMax
  6317.  
  6318.      move.l    ge_MinWidth(a0),ge_MinWidth(a1)
  6319.      move.l    ge_MaxWidth(a0),ge_MaxWidth(a1)
  6320.      move.l    ge_MinHeight(a0),ge_MinHeight(a1)
  6321.      move.l    ge_MaxHeight(a0),ge_MaxHeight(a1)
  6322.  
  6323.      lea       ge_Size(a1),a0
  6324.      move.l    a0,ge_Next(a1)
  6325.      rts
  6326.  
  6327. LVLayout:
  6328.      move.l    ge_Data(a0),a1
  6329.      moveq     #0,d6
  6330.      move.l    (a1),a1
  6331.  
  6332.      move.l    (a1),d7
  6333.      beq.s     .EmptyList
  6334.      move.l    d7,d0
  6335.      move.l    a1,d7
  6336.  
  6337. .CountEntries:
  6338.      addq.l    #1,d6
  6339.  
  6340.      move.l    d0,a1
  6341.      move.l    (a1),d0
  6342.      bne.s     .CountEntries
  6343.  
  6344. .EmptyList:
  6345.  
  6346.      move.l    a0,a3
  6347.      move.l    ge_Temp(a0),a0
  6348.  
  6349.      movem.l   ge_Domain(a3),d0-5
  6350.      movem.l   d0-5,ge_Domain(a0)
  6351.  
  6352.      subq.l    #3,d5
  6353.      lsr.l     #3,d5
  6354.      move.l    ge_Temp2(a3),a1
  6355.      move.l    d5,ge_Temp(a1)
  6356.      move.l    d7,ge_Temp2(a1)
  6357.      lea       ge_Size*2(a1),a1
  6358.      move.l    d6,ge_Data2(a1)
  6359.      move.l    d5,ge_Data3(a1)
  6360.  
  6361.      bsr       _Layout
  6362.  
  6363.      move.l    a3,a0
  6364.  
  6365. LVFirstVisAddress:
  6366.      move.l    ge_Temp3(a0),a2
  6367.      sub.l     a1,a1
  6368.  
  6369.      tst.l     ge_Data2(a2)
  6370.      beq.s     .EmptyList
  6371.  
  6372.      move.l    ge_Data(a2),d0
  6373.      move.l    ge_Data(a0),a1
  6374.  
  6375. .Loop:
  6376.      move.l    (a1),a1
  6377.      dbf       d0,.Loop
  6378.  
  6379. .EmptyList:
  6380.      move.l    ge_Temp2(a0),a2
  6381.      move.l    a1,ge_Temp2(a2)
  6382.      rts
  6383.  
  6384. LVRender:
  6385.      move.l    a0,a1
  6386.      move.l    ge_Temp3(a1),a0
  6387.      bsr       _RefreshGuiEntry
  6388.      move.l    ge_Temp2(a1),a0
  6389.      bra       _Render
  6390.  
  6391. LVClick:
  6392.      move.l    ge_Temp(a0),a0
  6393.      bra       _DoClick
  6394.  
  6395. LVHook:
  6396.      move.l    _CurrentDomain,-(a7)
  6397.      move.l    a0,a1
  6398.      move.l    ge_ID(a1),a0
  6399.      move.l    ge_Data(a1),ge_Data2(a0)
  6400.      bsr.s     LVFirstVisAddress
  6401.      move.l    ge_Temp2(a0),a0
  6402.      lea       ge_Domain(a0),a1
  6403.      move.l    a1,_CurrentDomain
  6404.      bsr       ILVClear
  6405.      bsr       ILVRenderEntries
  6406.      move.l    (a7)+,_CurrentDomain
  6407.      rts
  6408.  
  6409. IntListView:
  6410.      dc.l      ILVGetMinMax
  6411.      dc.l      0
  6412.      dc.l      ILVRender
  6413.      dc.l      ILVClick
  6414.  
  6415. ILVGetMinMax:
  6416.      move.l    #40,ge_MinWidth(a0)
  6417.      move.l    #12,ge_MinHeight(a0)
  6418.  
  6419.      clr.l     ge_MaxWidth(a0)
  6420.      clr.l     ge_MaxHeight(a0)
  6421.  
  6422.      lea       ge_Size(a0),a1
  6423.      move.l    a1,ge_Next(a0)
  6424.      rts
  6425.  
  6426. ILVRender:
  6427.      moveq     #0,d0
  6428.      moveq     #0,d1
  6429.      move.l    ge_Domain+gd_Width(a0),d2
  6430.      move.l    ge_Domain+gd_Height(a0),d3
  6431.      sf        d4
  6432.      bsr       _DrawBevelBox
  6433.  
  6434. ILVRenderEntries:
  6435.      moveq     #-1,d0
  6436.      move.l    d0,ge_Data2(a0)
  6437.  
  6438.      move.l    ge_Domain+gd_Width(a0),d0
  6439.      subq.l    #6,d0
  6440.      move.l    d0,_TextLimit
  6441.  
  6442.      move.l    ge_Temp2(a0),d0
  6443.      beq.s     .EmptyList
  6444.      move.l    d0,a1
  6445.      move.l    (a1),d0
  6446.  
  6447.      move.l    ge_Temp(a0),d1
  6448.      subq.l    #1,d1
  6449.      move.l    ge_Temp3(a0),a2
  6450.  
  6451.      moveq     #1,d2
  6452.  
  6453. .Loop:
  6454.      moveq     #0,d3
  6455.      cmp.l     a1,a2
  6456.      bne.s     .NoSel
  6457.      moveq     #3,d3
  6458. .NoSel:
  6459.  
  6460.      moveq     #2,d4
  6461.      move.l    d2,d5
  6462.      move.l    ge_Domain+gd_Width(a0),d6
  6463.      subq.l    #4,d6
  6464.      moveq     #8,d7
  6465.      move.l    d5,ge_Data2(a0)
  6466.      bsr       _DrawRectangle
  6467.  
  6468. ;.NoSel:
  6469.  
  6470.      move.l    lve_Color(a1),d4
  6471.      moveq     #0,d5
  6472.      move.l    lve_String(a1),a5
  6473.      moveq     #2,d6
  6474.      move.l    d2,d7
  6475.      bsr.s     _DrawText
  6476.  
  6477.      addq.l    #8,d2
  6478.      move.l    d0,a1
  6479.      move.l    (a1),d0
  6480.      dbeq      d1,.Loop
  6481.  
  6482. .EmptyList:
  6483.  
  6484.      clr.l     _TextLimit
  6485.      rts
  6486.  
  6487. ILVClear:
  6488.      rts
  6489.      moveq     #0,d3
  6490.      movem.l   ge_Domain+gd_Width(a0),d6-7
  6491.      moveq     #2,d4
  6492.      moveq     #1,d5
  6493.      subq.l    #4,d6
  6494.      subq.l    #2,d7
  6495.      bsr       _DrawRectangle
  6496.      rts
  6497.  
  6498. ILVClick:
  6499.      move.l    d1,d2
  6500.      subq.l    #1,d2
  6501.      bpl.s     .Clicku
  6502.      rts
  6503.  
  6504. .Clicku:
  6505.      move.l    a0,_ActiveGuiEntry
  6506.      move.l    #ILVHandler,_ActiveThingHandler
  6507.  
  6508. ILVHandler:
  6509.      btst      #6,$bfe001
  6510.      bne.s     .Release
  6511.  
  6512.      sub.l     ge_Domain+gd_Top(a0),d1
  6513.  
  6514.      subq.l    #1,d1
  6515.      bmi.s     .Before
  6516.  
  6517.      lsr.l     #3,d1
  6518.      move.l    ge_Temp(a0),d0
  6519.      subq.l    #1,d0
  6520.  
  6521.      cmp.l     d1,d0
  6522.      bcs.s     .After
  6523.  
  6524.      move.l    ge_Temp2(a0),d0
  6525.      beq       .Done
  6526.  
  6527.      clr.l     ILVHookCount
  6528.  
  6529.      move.l    d1,d2
  6530.      move.l    d0,a1
  6531.  
  6532.      subq.l    #1,d1
  6533.      bmi.s     .Vivi
  6534.  
  6535.      move.l    (a1),d0
  6536.  
  6537. .Loop:
  6538.      move.l    d0,a1
  6539.      move.l    (a1),d0
  6540.  
  6541.      dbeq      d1,.Loop
  6542.      bne.s     .Vivi
  6543.  
  6544.      move.l    lve_Prev(a1),a1
  6545.  
  6546. .Vivi:
  6547.      cmp.l     ge_Temp3(a0),a1
  6548.      beq.s     .Done
  6549.  
  6550.      move.l    a1,ge_Temp3(a0)
  6551.  
  6552.      moveq     #0,d3
  6553.      moveq     #2,d4
  6554.      move.l    ge_Data2(a0),d5
  6555.      bmi       ILVRenderEntries
  6556.  
  6557.      moveq     #8,d7
  6558.      move.l    ge_Domain+gd_Width(a0),d6
  6559.      subq.l    #4,d6
  6560.      bsr       _DrawRectangle
  6561.      bra       ILVRenderEntries
  6562.  
  6563. .Before:
  6564.      sub.l     #1,ILVHookCount
  6565.      bpl.s     .Done
  6566.  
  6567.      move.l    #5,ILVHookCount
  6568.      move.l    a0,a3
  6569.      move.l    ge_ID(a3),a1
  6570.  
  6571.      move.l    ge_Temp3(a1),a0
  6572.      move.l    ge_Data(a0),d7
  6573.      move.l    d7,d0
  6574.      subq.l    #1,d0
  6575.      move.l    d0,ge_Data(a0)
  6576.      bsr       _RefreshGuiEntry
  6577.  
  6578.      cmp.l     ge_Data(a0),d7
  6579.      beq.s     .Done
  6580.  
  6581.      move.l    a1,a0
  6582.      bsr       LVFirstVisAddress
  6583.  
  6584.      move.l    a3,a0
  6585.      move.l    ge_Temp2(a0),ge_Temp3(a0)
  6586.      bsr       ILVClear
  6587.  
  6588.      bra       ILVRenderEntries
  6589.  
  6590. .After:
  6591.      sub.l     #1,ILVHookCount
  6592.      bpl.s     .Done
  6593.  
  6594.      move.l    #5,ILVHookCount
  6595.      move.l    a0,a3
  6596.      move.l    ge_ID(a3),a1
  6597.  
  6598.      move.l    ge_Temp3(a1),a0
  6599.      move.l    ge_Data(a0),d7
  6600.      move.l    d7,d0
  6601.      addq.l    #1,d0
  6602.      move.l    d0,ge_Data(a0)
  6603.      bsr       _RefreshGuiEntry
  6604.  
  6605.      cmp.l     ge_Data(a0),d7
  6606.      beq.s     .Done
  6607.  
  6608.      move.l    a1,a0
  6609.      bsr       LVFirstVisAddress
  6610.  
  6611.      move.l    a3,a0
  6612.      move.l    ge_Temp3(a0),a1
  6613.      move.l    (a1),a1
  6614.      tst.l     (a1)
  6615.      beq.s     .MaisEuh
  6616.  
  6617.      move.l    a1,ge_Temp3(a0)
  6618.  
  6619. .MaisEuh:
  6620.      bsr       ILVClear
  6621.  
  6622.      bra       ILVRenderEntries
  6623.  
  6624. .Release:
  6625.      clr.l     _ActiveThingHandler
  6626.      clr.l     _ActiveGuiEntry
  6627.      clr.l     ILVHookCount
  6628.  
  6629.      move.l    ge_ID(a0),a1
  6630.      move.l    ge_Temp3(a0),d0
  6631.      move.l    d0,ge_Data3(a1)
  6632.  
  6633.      move.l    ge_Temp3(a1),a2
  6634.      move.l    ge_Data(a2),ge_Data2(a1)
  6635.  
  6636.      move.l    d0,a0
  6637.      move.l    ge_Hook(a1),d0
  6638.      beq.s     .Done
  6639.      move.l    d0,a1
  6640.      jmp       (a1)
  6641.  
  6642. .Done:
  6643.      rts
  6644.  
  6645. ILVHookCount:
  6646.      dc.l      0
  6647. ;fe
  6648. ;fs "_HSpacingEater"
  6649. _HSpacingEater:
  6650.      dc.l      HSEGetMinMax
  6651.      dc.l      0
  6652.      dc.l      0
  6653.      dc.l      -1
  6654.  
  6655. HSEGetMinMax:
  6656.      moveq     #-GuiHorSpacing*2,d0
  6657.      move.l    d0,ge_MinWidth(a0)
  6658.      move.l    d0,ge_MaxWidth(a0)
  6659.  
  6660.      clr.l     ge_MinHeight(a0)
  6661.      clr.l     ge_MaxHeight(a0)
  6662.  
  6663.      lea       ge_Size(a0),a1
  6664.      move.l    a1,ge_Next(a0)
  6665.      rts
  6666. ;fe
  6667. ;fs "_VSpacingEater"
  6668. _VSpacingEater:
  6669.      dc.l      VSEGetMinMax
  6670.      dc.l      0
  6671.      dc.l      0
  6672.      dc.l      -1
  6673.  
  6674. VSEGetMinMax:
  6675.      clr.l     ge_MinWidth(a0)
  6676.      clr.l     ge_MaxWidth(a0)
  6677.  
  6678.      moveq     #-GuiVerSpacing*2,d0
  6679.      move.l    d0,ge_MinHeight(a0)
  6680.      move.l    d0,ge_MaxHeight(a0)
  6681.  
  6682.      lea       ge_Size(a0),a1
  6683.      move.l    a1,ge_Next(a0)
  6684.      rts
  6685. ;fe
  6686. ;fs "_Empty"
  6687. _Empty:
  6688.      dc.l      EGetMinMax
  6689.      dc.l      0
  6690.      dc.l      0
  6691.      dc.l      0
  6692.  
  6693. EGetMinMax:
  6694.      clr.l     ge_MinWidth(a0)
  6695.      clr.l     ge_MaxWidth(a0)
  6696.      clr.l     ge_MinHeight(a0)
  6697.      clr.l     ge_MaxHeight(a0)
  6698.  
  6699.      lea       ge_Size(a0),a1
  6700.      move.l    a1,ge_Next(a0)
  6701.      rts
  6702. ;fe
  6703.  
  6704. ;fs "_Selector"
  6705. _Selector:
  6706.      dc.l      SGetMinMax
  6707.      dc.l      SLayout
  6708.      dc.l      SRender
  6709.      dc.l      SClick
  6710.  
  6711. SGetMinMax:
  6712.      move.l    #GuiScreenWidth,d2
  6713.      move.l    d2,ge_MinWidth(a0)
  6714.      move.l    d2,ge_MaxWidth(a0)
  6715.  
  6716.      moveq     #31,d0
  6717.      move.l    d0,ge_MinHeight(a0)
  6718.  
  6719.      move.l    a0,a1
  6720.      lea       ge_Size(a0),a0
  6721.      moveq     #0,d0
  6722.      moveq     #0,d1
  6723.      lsr.l     #1,d2
  6724.  
  6725. .Loop:
  6726.      addq.l    #1,d1
  6727.  
  6728.      bsr.s     _GetMinMax
  6729.  
  6730.      add.l     ge_MinWidth(a0),d0
  6731.      cmp.l     d0,d2
  6732.      bcs.s     .Skronk
  6733.  
  6734.      move.l    ge_Next(a0),a0
  6735.      tst.l     (a0)
  6736.      beq.s     .Done
  6737.  
  6738.      addq.l    #1,d0
  6739.  
  6740.      bra.s     .Loop
  6741.  
  6742. .Skronk:
  6743.      sub.l     ge_MinWidth(a0),d0
  6744.      subq.l    #1,d0
  6745.      subq.l    #1,d1
  6746. .Done:
  6747.      sub.l     d0,d2
  6748.  
  6749.      subq.l    #1,d1
  6750.      move.l    d1,ge_Temp(a1)
  6751.      beq.s     .SearchLast
  6752.  
  6753.      divu      d1,d2
  6754.      ext.l     d2
  6755.      addq.l    #1,d2
  6756.      move.l    d2,ge_Data(a1)
  6757.  
  6758. .SearchLast:
  6759.      tst.l     (a0)
  6760.      beq.s     .AllDone
  6761.      lea       ge_Size(a0),a0
  6762.      bra.s     .SearchLast
  6763. .AllDone:
  6764.  
  6765.      lea       ge_Size(a0),a0
  6766.      move.l    a0,ge_Next(a1)
  6767.      rts
  6768.  
  6769. SLayout:
  6770.      move.l    _CurrentDomain(pc),a1
  6771.  
  6772.      move.l    a0,a1
  6773.      move.l    ge_Data(a1),d2
  6774.  
  6775.      lea       ge_Size(a0),a0
  6776.      moveq     #0,d0
  6777.  
  6778.      move.l    ge_Temp(a1),d3
  6779.      bne.s     .PosLoop
  6780.  
  6781.      move.l    #GuiScreenWidth/2,d0
  6782.      sub.l     ge_MinWidth(a0),d0
  6783.      lsr.l     #1,d0
  6784.  
  6785. .PosLoop:
  6786.      move.l    d0,ge_Domain+gd_Left(a0)
  6787.  
  6788.      move.l    ge_MinWidth(a0),d1
  6789.      move.l    d1,ge_Domain+gd_Width(a0)
  6790.  
  6791.      add.l     d1,d0
  6792.      move.l    d0,ge_Domain+gd_Right(a0)
  6793.  
  6794.      move.l    ge_MinHeight(a0),d1
  6795.      move.l    d1,ge_Domain+gd_Height(a0)
  6796.      move.l    d1,ge_Domain+gd_Bottom(a0)
  6797.  
  6798.      clr.l     ge_Domain+gd_Top(a0)
  6799.  
  6800.      add.l     d2,d0
  6801.  
  6802.      bsr       _Layout
  6803.  
  6804.      move.l    ge_Next(a0),a0
  6805.      dbf       d3,.PosLoop
  6806.  
  6807.      rts
  6808.  
  6809. SRender:
  6810.      move.l    _CurrentDomain(pc),a1
  6811.      move.l    gd_Top(a1),d0
  6812.      add.w     GuiP(pc),d0
  6813.      move.w    d0,GuiSelP
  6814.  
  6815.      move.l    #GuiLayer1,_GuiL1Ptr
  6816.      bra       _GRender
  6817.  
  6818. SClick:
  6819.      move.l    _CurrentDomain(pc),a1
  6820.      sub.l     gd_Top(a1),d1
  6821.  
  6822.      lea       ge_Size(a0),a0
  6823.      lsr.l     #1,d0
  6824.  
  6825. .Loop:
  6826.      cmp2.l    ge_Domain+gd_Left(a0),d0
  6827.      bcs.s     .AGrunt
  6828.  
  6829.      cmp2.l    ge_Domain+gd_Top(a0),d1
  6830.      bcc.s     .Bingo
  6831.  
  6832. .AGrunt:
  6833.      move.l    ge_Next(a0),a0
  6834.      tst.l     (a0)
  6835.      bne.s     .Loop
  6836.      rts
  6837.  
  6838. .Bingo:
  6839.      bsr.s     _DoClick
  6840.      rts
  6841. ;fe
  6842. ;fs "_Sprite"
  6843. _Sprite:
  6844.      dc.l      SprGetMinMax
  6845.      dc.l      0
  6846.      dc.l      SprRender
  6847.      dc.l      SprClick
  6848.  
  6849. SprGetMinMax:
  6850.      move.l    ge_Data(a0),a1
  6851.  
  6852.      move.l    spd_Width(a1),d0
  6853.      move.l    d0,ge_MinWidth(a0)
  6854.      move.l    d0,ge_MaxWidth(a0)
  6855.  
  6856.      move.l    spd_Height(a1),d0
  6857.      move.l    d0,ge_MinHeight(a0)
  6858.      move.l    d0,ge_MaxHeight(a0)
  6859.  
  6860.      lea       ge_Size(a0),a1
  6861.      move.l    a1,ge_Next(a0)
  6862.      rts
  6863.  
  6864. SprRender:         ; d6/d7=X,Y a3=SpriteData
  6865.      move.l    ge_Data(a0),a3
  6866.  
  6867.      move.l    _CurrentDomain(pc),a0
  6868.      move.l    gd_Left(a0),d6
  6869.      move.l    gd_Top(a0),d7
  6870.  
  6871.      move.l    d6,d5
  6872.      and.l     #$f,d5
  6873.      ror.w     #4,d5
  6874.      move.w    d5,d0
  6875.      swap      d5
  6876.      move.w    d0,d5
  6877.      or.l      #$0fca0000,d5
  6878.  
  6879.      lea       SprBlit(pc),a0
  6880.      moveq     #0,d0
  6881.      bsr       _GetBlitNode
  6882.      move.l    a1,a0
  6883.  
  6884.      move.l    d5,(a0)+
  6885.  
  6886.      move.w    spd_WWidth+2(a3),d5
  6887.      addq.w    #1,d5
  6888.  
  6889.      move.w    #GuiSelBufferWidth,d1
  6890.      sub.w     d5,d1
  6891.      sub.w     d5,d1
  6892.  
  6893.      moveq     #-2,d2
  6894.      move.w    d2,(a0)+
  6895.      move.w    d1,(a0)+
  6896.  
  6897.      mulu      #GuiSelLineSize,d7
  6898.      lsr.l     #4,d6
  6899.      add.l     d6,d7
  6900.      add.l     d6,d7
  6901.  
  6902.      add.l     _GuiSelBitmap(pc),d7
  6903.  
  6904.      movem.l   spd_Bitmap(a3),d3-4
  6905.  
  6906.      move.l    d4,(a0)+
  6907.      move.l    d3,(a0)+
  6908.      move.l    d7,(a0)+
  6909.  
  6910.      move.w    spd_Height+2(a3),d2
  6911.      mulu      #NbPlanes,d2
  6912.      move.w    d2,(a0)+
  6913.      move.w    d5,(a0)
  6914.  
  6915.      bsr       _AddBlitNode
  6916.      rts
  6917.  
  6918. SprBlit:
  6919.      move.l    (a0)+,bltcon0(a6)
  6920.      moveq     #-1,d0
  6921.      clr.w     d0
  6922.      move.l    d0,bltafwm(a6)
  6923.      move.w    (a0)+,d0
  6924.      move.w    d0,bltamod(a6)
  6925.      move.w    d0,bltbmod(a6)
  6926.      move.w    (a0)+,d0
  6927.      move.w    d0,bltcmod(a6)
  6928.      move.w    d0,bltdmod(a6)
  6929.      move.l    (a0)+,bltapt(a6)
  6930.      move.l    (a0)+,bltbpt(a6)
  6931.      move.l    (a0)+,d0
  6932.      move.l    d0,bltcpt(a6)
  6933.      move.l    d0,bltdpt(a6)
  6934.      move.w    (a0)+,bltsizv(a6)
  6935.      move.w    (a0),bltsizh(a6)
  6936.      rts
  6937.  
  6938. SprClick:
  6939.      move.l    a0,_ActiveGuiEntry
  6940.      lea       SprHandler(pc),a1
  6941.      move.l    a1,_ActiveThingHandler
  6942.      rts
  6943.  
  6944. SprHandler:
  6945.      btst      #6,$bfe001
  6946.      beq.s     .Done
  6947.  
  6948.      clr.l     _ActiveThingHandler
  6949.      move.l    ge_Hook(a0),d0
  6950.      beq.s     .Done
  6951.      move.l    d0,a0
  6952.      jmp       (a0)
  6953.  
  6954. .Done:
  6955.      rts
  6956. ;fe
  6957. ;fe
  6958.  
  6959. _CtGuiTemp:
  6960.      ds.l      1
  6961. ;fe
  6962.  
  6963. _ActiveGuiObject:
  6964.      ds.l      1
  6965. _ActiveGuiObjData:
  6966.      ds.l      1
  6967. _CurrentDomain:
  6968.      ds.l      1
  6969.  
  6970. ;fs "_ClearDomain"
  6971. _ClearDomain:
  6972.      moveq     #0,d3
  6973.      moveq     #0,d4
  6974.      moveq     #0,d5
  6975.      move.l    _CurrentDomain(pc),a1
  6976.      move.l    gd_Width(a1),d6
  6977.      move.l    gd_Height(a1),d7
  6978.      bsr.s     _DrawRectangle
  6979.      rts
  6980. ;fe
  6981. ;fs "_DrawBevelBox"
  6982. _DrawBevelBox:     ; d0/d1/d2/d3=X,Y,W,H d4=RecessedFlag
  6983.      movem.l   d3-d7/a0,-(a7)
  6984.  
  6985.      move.l    d3,a0
  6986.      moveq     #2,d3
  6987.      tst.b     d4
  6988.      beq.s     .Raised
  6989.      moveq     #1,d3
  6990. .Raised:
  6991.  
  6992.      move.l    d0,d4
  6993.      move.l    d1,d5
  6994.      moveq     #2,d6
  6995.      move.l    a0,d7
  6996.      bsr.s     _DrawRectangle
  6997.  
  6998.      eor.b     #3,d3
  6999.      add.l     d2,d4
  7000.      subq.l    #2,d4
  7001.      bsr.s     _DrawRectangle
  7002.  
  7003.      move.l    d0,d4
  7004.      addq.l    #1,d4
  7005.      add.l     a0,d5
  7006.      subq.l    #1,d5
  7007.      move.l    d2,d6
  7008.      subq.l    #1,d6
  7009.      moveq     #1,d7
  7010.      bsr.s     _DrawRectangle
  7011.  
  7012.      eor.b     #3,d3
  7013.      move.l    d0,d4
  7014.      move.l    d1,d5
  7015.      bsr.s     _DrawRectangle
  7016.  
  7017.      movem.l   (a7)+,d3-7/a0
  7018.      rts
  7019. ;fe
  7020. ;fs "_DrawRectangle"
  7021. _DrawRectangle:    ; d4/d5/d6/d7=X,Y,W,H d3=Col
  7022.      ;rts
  7023.      movem.l   d0-7/a0-6,-(a7)
  7024.  
  7025.      move.l    _CurrentDomain(pc),a0
  7026.      add.l     gd_Left(a0),d4
  7027.      add.l     gd_Top(a0),d5
  7028.  
  7029.      add.l     #2,_RectCount
  7030.  
  7031.      lea       _RectBlit,a0
  7032.      moveq     #0,d0
  7033.      bsr       _GetBlitNode
  7034.      move.l    a1,a2
  7035.  
  7036.      lea       _RectBlit,a0
  7037.      moveq     #0,d0
  7038.      bsr       _GetBlitNode
  7039.      move.l    a1,a0
  7040.      move.l    a2,a3
  7041.  
  7042.      move.l    #$050c0000,d0
  7043.      move.l    #$05fc0000,d2
  7044.  
  7045.      tst.l     d3
  7046.      bpl.s     .NoInvVid
  7047.      move.l    #$053c0000,d0
  7048.      move.l    d0,d2
  7049. .NoInvVid:
  7050.  
  7051.      move.l    d0,d1
  7052.  
  7053.      btst      #0,d3
  7054.      beq.s     .Bp1Ok
  7055.      move.l    d2,d0
  7056. .Bp1Ok:
  7057.      move.l    d0,(a0)+
  7058.      btst      #1,d3
  7059.      beq.s     .Bp2Ok
  7060.      move.l    d2,d1
  7061. .Bp2Ok:
  7062.      move.l    d1,(a3)+
  7063.  
  7064.      move.l    d4,d0
  7065.      lsr.l     #4,d4
  7066.  
  7067.      and.b     #$f,d0
  7068.      extb.l    d0
  7069.      add.l     d0,d6
  7070.      moveq     #-1,d1
  7071.      lsr.w     d0,d1
  7072.      move.w    d1,(a0)+
  7073.      move.w    d1,(a3)+
  7074.  
  7075.      move.l    d6,d0
  7076.      lsr.l     #4,d6
  7077.  
  7078.      moveq     #-1,d1
  7079.  
  7080.      and.b     #$f,d0
  7081.      beq.s     .Gaaa
  7082.      addq.l    #1,d6
  7083.      lsr.w     d0,d1
  7084.      not.w     d1
  7085. .Gaaa:
  7086.  
  7087.      move.w    d1,(a0)+
  7088.      move.w    d1,(a3)+
  7089.  
  7090.      move.l    _GuiBitmap(pc),d0
  7091.      add.l     d4,d0
  7092.      add.l     d4,d0
  7093.  
  7094.      move.l    d5,d1
  7095.      move.l    #GuiLineSize,d2
  7096.      mulu      d2,d1
  7097.      add.l     d1,d0
  7098.  
  7099.      move.l    d0,(a0)+
  7100.  
  7101.      add.l     #GuiBufferWidth,d0
  7102.      move.l    d0,(a3)+
  7103.  
  7104.      sub.l     d6,d2
  7105.      sub.l     d6,d2
  7106.  
  7107.      move.w    d2,(a0)+
  7108.      move.w    d2,(a3)+
  7109.  
  7110.      move.w    d7,(a0)+
  7111.      move.w    d7,(a3)+
  7112.      move.w    d6,(a0)
  7113.      move.w    d6,(a3)
  7114.  
  7115.      bsr       _PreAddBlitNode
  7116.      move.l    a2,a1
  7117.      bsr       _AddBlitNode
  7118.  
  7119.      movem.l   (a7)+,d0-7/a0-6
  7120.      rts
  7121. _RectBlit:
  7122.      lea       _RectHook(pc),a5
  7123.      move.l    a5,_BlitHook
  7124.  
  7125.      move.l    (a0)+,bltcon0(a6)
  7126.      move.l    (a0)+,bltafwm(a6)
  7127.      move.l    (a0)+,d0
  7128.      move.l    d0,bltbpt(a6)
  7129.      move.l    d0,bltdpt(a6)
  7130.      move.w    (a0)+,d0
  7131.      move.w    d0,bltbmod(a6)
  7132.      move.w    d0,bltdmod(a6)
  7133.      move.w    #-1,bltadat(a6)
  7134.      move.w    (a0)+,bltsizv(a6)
  7135.      move.w    (a0),bltsizh(a6)
  7136.      rts
  7137. _RectHook:
  7138.      sub.l     #1,_RectCount
  7139.      rts
  7140. _RectCount:
  7141.      dc.l      0
  7142. ;fe
  7143. ;fs "_DrawText"
  7144. _TextLimit:
  7145.      dc.l      0
  7146. _DrawText:         ; d6/d7=X,Y d5=Length d4=Col a5=String
  7147.      movem.l   d3/d5-6/a0/a5,-(a7)
  7148.  
  7149.      tst.l     d5
  7150.      bne.s     .LengthOk
  7151.  
  7152.      move.l    a5,a0
  7153. .StrLen:
  7154.      tst.b     (a0)+
  7155.      bne.s     .StrLen
  7156.      sub.l     a5,a0
  7157.      move.l    a0,d5
  7158.      subq.l    #1,d5
  7159.      beq.s     .Done
  7160.  
  7161. .LengthOk:
  7162.  
  7163.      move.l    _TextLimit(pc),d3
  7164.      beq.s     .NoClip
  7165.      sub.l     d6,d3
  7166.      lsr.l     #3,d3
  7167.      cmp.l     d5,d3
  7168.      bcc.s     .NoClip
  7169.      move.l    d3,d5
  7170. .NoClip:
  7171.  
  7172.      subq.l    #1,d5
  7173.      move.l    d5,d3
  7174. .Loop:
  7175.      move.b    (a5)+,d5
  7176.      bsr.s     _DrawChar
  7177.      addq.l    #8,d6
  7178.      dbf       d3,.Loop
  7179.  
  7180. .Done:
  7181.      movem.l   (a7)+,d3/d5-6/a0/a5
  7182.      rts
  7183. ;fe
  7184. ;fs "_DrawChar"
  7185. _DrawChar:         ; d6/d7=X,Y d5=Char d4=Col
  7186.      ;rts
  7187.      movem.l   d0-3/d6-7/a0-2,-(a7)
  7188.  
  7189.      move.l    _CurrentDomain(pc),a0
  7190.      add.l     gd_Left(a0),d6
  7191.      add.l     gd_Top(a0),d7
  7192.  
  7193.      cmp.b     #$a0,d5
  7194.      beq.s     .Done
  7195.      bcs.s     .Ok
  7196.  
  7197.      cmp.b     #$ad,d5
  7198.      bcs.s     .Pfouh
  7199.      beq.s     .Crévindiou
  7200.      subq.b    #1,d5
  7201.      bra.s     .Pfouh
  7202. .Crévindiou:
  7203.      move.b    #"-",d5
  7204.      bra.s     .Ok
  7205. .Pfouh:
  7206.      subq.b    #1,d5
  7207. .Ok:
  7208.  
  7209.      move.l    _GuiBitmap(pc),a1
  7210.      mulu      #GuiLineSize,d7
  7211.      add.l     d7,a1
  7212.  
  7213.      moveq     #0,d7
  7214.      not.b     d7
  7215.      ror.l     #8,d7
  7216.  
  7217.      btst      #0,d5
  7218.      beq.s     .EvenChar
  7219.      subq.l    #2,a1
  7220.      addq.l    #8,d6
  7221.      lsr.l     #8,d7
  7222. .EvenChar:
  7223.  
  7224.      lea       _GuiFont(pc),a0
  7225.      and.b     #$fe,d5
  7226.      add.l     d5,a0
  7227.  
  7228.      move.l    d6,d0
  7229.      lsr.l     #3,d0
  7230.      and.b     #$fe,d0
  7231.      add.l     d0,a1
  7232.  
  7233.      and.l     #$f,d6
  7234.      move.l    #254,d0
  7235.      move.l    #GuiBufferWidth,d1
  7236.      moveq     #7,d3
  7237.  
  7238. .RWait:
  7239.      tst.l     _RectCount
  7240.      bne.s     .RWait
  7241.  
  7242.      lea       CharTable(pc),a2
  7243.      jsr       (a2,d4.w*2)
  7244.  
  7245. .Done:
  7246.      movem.l   (a7)+,d0-3/d6-7/a0-2
  7247.      rts
  7248.  
  7249. CharTable:
  7250.      bra.s     CharLoop0
  7251.      bra.s     CharLoop1
  7252.      bra.s     CharLoop2
  7253.      bra.s     CharLoop3
  7254.  
  7255. CharLoop0:
  7256.      move.l    (a0),d2
  7257.      and.l     d7,d2
  7258.      lsr.l     d6,d2
  7259.      not.l     d2
  7260.      and.l     d2,(a1)
  7261.      add.l     d1,a1
  7262.      and.l     d2,(a1)
  7263.      add.l     d1,a1
  7264.      add.l     d0,a0
  7265.      dbf       d3,CharLoop0
  7266.      rts
  7267. CharLoop1:
  7268.      move.l    (a0),d2
  7269.      and.l     d7,d2
  7270.      lsr.l     d6,d2
  7271.      or.l      d2,(a1)
  7272.      not.l     d2
  7273.      add.l     d1,a1
  7274.      and.l     d2,(a1)
  7275.      add.l     d1,a1
  7276.      add.l     d0,a0
  7277.      dbf       d3,CharLoop1
  7278.      rts
  7279. CharLoop2:
  7280.      move.l    (a0),d2
  7281.      and.l     d7,d2
  7282.      lsr.l     d6,d2
  7283.      not.l     d2
  7284.      and.l     d2,(a1)
  7285.      not.l     d2
  7286.      add.l     d1,a1
  7287.      or.l      d2,(a1)
  7288.      add.l     d1,a1
  7289.      add.l     d0,a0
  7290.      dbf       d3,CharLoop2
  7291.      rts
  7292. CharLoop3:
  7293.      move.l    (a0),d2
  7294.      and.l     d7,d2
  7295.      lsr.l     d6,d2
  7296.      or.l      d2,(a1)
  7297.      add.l     d1,a1
  7298.      or.l      d2,(a1)
  7299.      add.l     d1,a1
  7300.      add.l     d0,a0
  7301.      dbf       d3,CharLoop3
  7302.      rts
  7303. ;fe
  7304. ;fs "Font"
  7305. _GuiFont:
  7306.      incbin    "GuiFont.bin"
  7307. ;fe
  7308.